我有一個公共單元類。我只想訪問GeofenceUnit類THROUGH單元類。因此,我使GeofenceUnit成爲Unit的內部類。一個單位有許多GeofenceUnits。因此,當我實例化一個單元時,我想在單元對象中存儲很多GeofenceUnits。從外部類非靜態構造函數訪問內部類的靜態方法
public class Unit {
public ArrayList<Unit.GeofenceUnit> geofences;
public Unit(int id){
this.id = id;
geofences = this.geofence.fill();
}
private static class GeofenceUnit {
ArrayList<GeofenceUnit> geofences;
private static ArrayList<Unit.GeofenceUnit> fill(){
...
while(resultSet.next()){
geofences.add(new Geofence());
}
return geofences;
}
}
}
上面的代碼的問題,你可能已經注意到了,我想在Unit的構造函數中調用靜態方法fill()。這會產生警告「應該以靜態方式訪問類型爲Unit.GeofenceUnit的靜態方法fill()」。我完全同意這個警告。我不想通過靜態方式訪問它。但是,如果我從GeofenceUnit類定義和它的fill()方法簽名中刪除靜態修飾符,那麼它從邏輯上講並不合理。爲什麼我會在實例方法中填充很多GeofenceUnits。良好的程序實踐表明該方法應該是靜態的。
我想我只是在這裏有一個糟糕的設計。有關如何重構這個的任何建議?
只是一個提示,如果你正在尋找工作代碼的建議[CodeReview SE](https://codereview.stackexchange.com/)將是一個很好的地方張貼 – awksp
爲什麼你不只是把它稱爲'GeofenceUnit.fill()'? –
'如果我從GeofenceUnit類定義及其fill()方法簽名中移除靜態修飾符'。確保你明白具有「靜態」嵌套類的含義。 –