2017-01-05 68 views
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)); 
    } 
} 
+3

它完全取決於您的需求。記住它是可變的,如果你聲明它是'public',那麼可以添加新的條目。如果你想防止這種行爲,那麼你應該保持它'私人',只暴露像'getKey()'或'getValue()'的功能。 – user2004685

+1

最大的問題,如果你把它公開:'MapClass.map = null;'。但如果你把它做成'最終',這會稍微緩解這個問題。還有一個問題,如果你想在你的包含類中提供線程安全。相關的線程:http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – ebyrob

+0

它會說,在大多數情況下使用私人應該更好 - 當然不總是。原因很簡單:有更好的代碼封裝。當你編寫自定義方法來訪問地圖時,你可以改變實現,使用其他庫 - 即使是完全不同的API - 並且擁有更多的控制權。 當然,有時公衆可能會更好,但目前除了內部API以外,我沒有其他理由可以公開其他公衆理由;)可以發佈很長的答案。你寫過你在上大學,這是你任務的一部分嗎?也許如果你發佈更多的信息,我們可以幫助你更多:) –

回答

0

我寧願使用第一種方式。首先,如果可能的話,所有類的領域都應該是私有的。其次,對象不應該只是具有getter和setter的容器,而應該提供其他方法來更改數據(例如getValueForKey(int key),如第一個示例中所示)。它在很多關於面向對象的書中有廣泛的描述。

相關問題