2
他のクラスで静的マップを使用したいと思います。あなたができるなら、どの練習が良いか教えてください。私はそれを非公開にして、キーと値の適切なゲッターとセッターを提供することができます。一方、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));
}
}
2番目のオプション例:
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'として宣言すれば、新しいエントリを追加することができます。そのような振る舞いを防ぐには、 'private'を保ち、' getKey() 'や' getValue() 'のような関数を公開するだけです。 – user2004685
あなたがそれを公開すると最大の問題: 'MapClass.map = null;'。しかし、もしそれを「最終的」にすれば、これは問題を少し緩和します。あなたのクラスにスレッドセーフティを提供するかどうかという質問もあります。関連スレッド:http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – ebyrob
プライベートを使用するほうが、ほとんどの場合、よりよくなるはずです。もちろんそうとは限りません。理由はシンプルです:コードのコード化が進んでいます。マップにアクセスするためのカスタムメソッドを記述すると、インプリメンテーションを変更したり、別のライブラリを使用したりすることができます(全く異なるAPIを使用していても)。 もちろん公開されている場合もありますが、現在のところ、内部API以外の理由は公開されていません。あなたは大学にいると書きましたが、これはあなたの課題の一部ですか?もっと情報を投稿すると、もっとお手伝いできるでしょう:) –