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

あなたのニーズに完全に依存します。変更可能であることを覚えておいて、 'public'として宣言すれば、新しいエントリを追加することができます。そのような振る舞いを防ぐには、 'private'を保ち、' getKey() 'や' getValue() 'のような関数を公開するだけです。 – user2004685

+1

あなたがそれを公開すると最大の問題: 'MapClass.map = null;'。しかし、もしそれを「最終的」にすれば、これは問題を少し緩和します。あなたのクラスにスレッドセーフティを提供するかどうかという質問もあります。関連スレッド:http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – ebyrob

+0

プライベートを使用するほうが、ほとんどの場合、よりよくなるはずです。もちろんそうとは限りません。理由はシンプルです:コードのコード化が進んでいます。マップにアクセスするためのカスタムメソッドを記述すると、インプリメンテーションを変更したり、別のライブラリを使用したりすることができます(全く異なるAPIを使用していても)。 もちろん公開されている場合もありますが、現在のところ、内部API以外の理由は公開されていません。あなたは大学にいると書きましたが、これはあなたの課題の一部ですか?もっと情報を投稿すると、もっとお手伝いできるでしょう:) –

答えて

0

私は最初の方法を使用することを好むだろう。まず第一に、クラスのすべてのフィールドが可能な場合はプライベートにする必要があります。第2に、オブジェクトはgetterとsetterを持つコンテナであってはなりませんが、データを変更する他のメソッドも提供する必要があります(たとえば、最初の例のようにgetValueForKey(int key))。 OOPに関する多くの書籍で広く説明されています。

関連する問題