2017-10-11 1 views
2

Ist es falsch, meinen Code wie folgt zu schreiben? Ich möchte in der Lage sein, eine E-Mail in meiner Personenklasse zu speichern, die auch den Typ der E-Mail enthält (Arbeit, Persönlich usw.). Ich entschied mich dafür, eine TreeMap zu verwenden. Ich weiß, dass es eine gute Übung für alle Variablen ist, privat zu sein und Getter und Setter zu benutzen, um sie zu manipulieren, aber ist es falsch, mein TreeSet zu manipulieren, indem ich direkt die TreeSet-Methoden anstelle meiner eigenen in meiner Person-Klasse verwende? Mit anderen Worten, ist dies ein zulässiger Weg dies zu tun? Der Code scheint gut zu funktionieren. Verwenden einer TreeMap als Eigenschaft in einer Person-Objektklasse

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

Willkommen bei Stack Overflow! Bitte [besuchen Sie die Tour] (http://stackoverflow.com/tour), um zu sehen, wie die Website funktioniert und welche Fragen hier zum Thema stehen, und bearbeiten Sie Ihre Frage entsprechend. –

Antwort

5

Es ist nicht schrecklich, aber es ermöglicht Merkmal Neid (den Code Geruch wodurch Objekte die Felder anderer Objekte direkt verwendet werden).

Das Problem ist, dass Sie möchten nur das Hinzufügen von E-Mail-Adressen zu der Person aktivieren, aber Sie tatsächlich alle Operationen der TreeMap offen legen. Methoden wie ceilingKey, tailMap und remove. Um die Operationen einzuschränken, die ausgeführt werden können, sollten Sie das Feld vollständig einkapseln und explizite Methoden bereitstellen.

3

Normalerweise ArrayList wird verwendet, aber ich denke, der Grund, warum Sie TreeMap verwenden, ist, möchten Sie jede E-Mail oder Telefonnummer (Schlüssel) einen ContactType (besser Enum verwenden).

Zum Beispiel können Sie nicht [email protected] für beide Personal, Schule.

Und auch, es ist besser, Sie machen phoneNum als privat und fügen addContact/ removeContact Methoden zu Person Klasse.

+0

Hallo, ich frage mich, wie würde ich etwas wie enum als ContactType implementieren? Ich bin neu in Java und ich verstehe den Kern des Enum-Konzepts, habe aber Probleme damit, es in den Code zu implementieren. Vielen Dank! –

+1

sicher: \t Enum ContactTypes { \t \t Schule, \t \t Personal, \t \t Arbeit \t} \t \t public class Person { \t \t TreeMap phoneNum = new TreeMap (); \t \t} –

Verwandte Themen