2017-10-11 3 views
2

次のようにコードを書くのは間違っていますか?私はそれがある電子メールのタイプ(仕事、個人、など)を含む私の人のクラスに電子メールを格納できるようにしたい。私はこれにTreeMapを使うことにしました。すべての変数がプライベートでgetterとsetterを使って操作するのがよい習慣であることは知っていますが、私のPersonクラスではなく、TreeSetメソッドを直接使用してTreeSetを操作するのは間違っていますか?言い換えれば、これはこれを行うための有効な許容方法ですか?コードは正常に動作するようです。PersonオブジェクトクラスのプロパティとしてTreeMapを使う

public class Person { 
    private String firstName; 
    private String lastName; 
    private String note; 
    TreeMap<String, String> phoneNum = new TreeMap<String, String>(); 

    // Assume constructor method contains firstName & lastName and there are 
    // getters and setters for both 
} 

public class MainDriver { 
    public static void main(String[] args) { 
    Person p1 = new Person("John", "Smith"); 

    p1.phoneNum.put("[email protected]", "School"); 
    p1.phoneNum.put("[email protected]", "Personal"); 

    Person p2 = new Person("Sam", "Johnson"); 

    p2.phoneNum.put("[email protected]", "Personal"); 
    p2.phoneNum.put("samjohnson", "Work"); 

    System.out.println(p1.phoneNum); 
    System.out.println(p2.phoneNum); 
    } 
} 

Output: 
{[email protected]=Personal, [email protected]=School} 
{samsamyoussef=Work, [email protected]=Personal} 
+0

ようこそスタックオーバーフロー!どのようにサイトが動作しているのか、ここでどのような質問が話題になっているのかを知るには[ツアーに参加してください](http://stackoverflow.com/tour)してください。 –

答えて

5

それはひどいはないが、それは機能の羨望(オブジェクトが、直接、他のオブジェクトのフィールドを使用することにより、コードのにおい)を可能にします。

問題はPersonに電子メールアドレスを追加するだけで、実際にはTreeMapのすべての操作が公開されていることです。 ceilingKey,tailMapおよびremoveのような方法。実行可能な操作を制限するには、フィールドを完全にカプセル化し、明示的なメソッドを提供する必要があります。

3

通常はArrayListが使用されていますが、TreeMapを使用している理由は、各電子メールまたは電話番号(キー)に1つのContactType(enumを使用する方がよい)が必要なのかと推測しています。

たとえば、Personal、Schoolの両方で[email protected]を使用することはできません。

さらに、phoneNumをプライベートにして、yr PersonクラスにaddContact/ removeContactメソッドを追加することをお勧めします。

+0

こんにちは、ContactTypeのようなenumのようなものをどうやって実装するのですか?私はJavaに慣れていないので、enumコンセプトの要点を理解しているようですが、コードに実装するのに問題があります。ありがとう!確かに –

+1

: \t列挙ContactTypes { \t \t学校、 \t \t個人、 \t \t作業 \t} \t \tパブリッククラスPerson { \t \tのTreeMap <文字列、ContactTypes> PHONENUM =新しいTreeMapを<文字列、 ContactTypes>(); \t \t} –

関連する問題