2
我想在其他類中使用靜態地圖。如果你能告訴我哪種做法更好。我可以把它變成私人的,併爲關鍵和價值提供適當的獲取者和接受者。另一方面,第二個選項只是將其聲明爲公共的,並且在這些類中使用內置Map Collection中的方法。課堂上的靜態地圖 - 公共還是私人?
第一選項例如:
public class MapClass{
private static Map<int, String> map = new HashMap<>();
public String getValueForKey(int key){
return map.get(key);
}
// other methods
}
public class DifferentClass{
public void writeString(int number){
System.out.println(MapClass.getValueForKey(number));
}
}
第二個選項例如:
public class MapClass{
public static Map<int, String> map = new HashMap<>();
}
public class DifferentClass{
public void writeString(int number){
System.out.println(MapClass.get(number));
}
}
它完全取決於您的需求。記住它是可變的,如果你聲明它是'public',那麼可以添加新的條目。如果你想防止這種行爲,那麼你應該保持它'私人',只暴露像'getKey()'或'getValue()'的功能。 – user2004685
最大的問題,如果你把它公開:'MapClass.map = null;'。但如果你把它做成'最終',這會稍微緩解這個問題。還有一個問題,如果你想在你的包含類中提供線程安全。相關的線程:http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – ebyrob
它會說,在大多數情況下使用私人應該更好 - 當然不總是。原因很簡單:有更好的代碼封裝。當你編寫自定義方法來訪問地圖時,你可以改變實現,使用其他庫 - 即使是完全不同的API - 並且擁有更多的控制權。 當然,有時公衆可能會更好,但目前除了內部API以外,我沒有其他理由可以公開其他公衆理由;)可以發佈很長的答案。你寫過你在上大學,這是你任務的一部分嗎?也許如果你發佈更多的信息,我們可以幫助你更多:) –