2017-07-02 5 views
1

Ich versuche, Patient und Allergie-Klasse zu erstellen, und ich bin verwirrt über Liste Allergien in setAllergies, ob es sein sollte:Objekte in Arraylist hinzufügen, während Klasse Gestaltung in Java

this.allergies = allergies; 

oder

allergies.add(allergies); 

Patientenklasse:

public class Patient { 

    private List<Allergy> allergies; 

    public List<Allergy> getAllergies() { 
     return allergies; 
    } 

    public void setAllergies(List<Allergy> allergies) { 
     this.allergies = allergies; 
    } 

} 

Allergie Klasse:

+0

'Allergien.add (Allergien)' macht keinen Sinn. Es würde nicht einmal kompilieren. – shmosel

+0

@shmosel Die Hauptverwirrung, die ich habe, ist, dass Allergie-Klasse Allergie-Objekt dann zurückgibt, wie wird es in der Liste hinzugefügt von this.allergien = Allergien? Woher kommt die Liste der Allergien? Da Allergien als Parameter weitergegeben werden. –

Antwort

1
allergies.add(allergies); 

fügt ein Objekt zu sich selbst hinzu.
Warum das tun? Außerdem können Sie keine Liste zu einer Liste mit add() hinzufügen.
Sie müssen addAll() dafür verwenden.


Tatsächlich ist das allergies Feld ist, wenn eine nullPatient Instanz erstellt wird.

Als Konsequenz wird allergies.invokeSomething(...); eine NullPointerException werfen. Außerdem hat das Präfix "set" eine Semantik zum Überschreiben/Ersetzen, nicht zum Hinzufügen.
So sollen Sie Ihre Methode halten, wie Sie für den Moment schreiben:

public void setAllergies(List<Allergy> allergies) { 
    this.allergies = allergies; 
} 

Nun, wenn Sie eine Möglichkeit bieten wollen Allergies die Allergies Objekte im allergies Feld enthielten hinzufügen, Sie addAllergies() ein Verfahren zur Verfügung stellen sollen:

public void addAllergies(List<Allergy> allergies) { 
    this.allergies.addAll(allergies); 
} 

und Sie sollten auch die allergies Feld in seiner Erklärung (oder im Konstruktor Patient) initialisieren:

private List<Allergy> allergies = new ArrayList<>(); 
+0

Die Hauptverwirrung, die ich habe, ist, dass Allergie-Klasse Allergie-Objekt dann zurückgibt, wie wird es in der Liste hinzugefügt von this.allergien = Allergien? Woher kommt die Liste der Allergien? Da Allergien als Parameter weitergegeben werden. –

+0

"Woher kommt die Liste der Allergien?" Sie haben die Allergie-Liste, die Sie im Patientenobjekt einstellen wollen, als Argument angegeben. Beispiel: 'Patient p = neuer Patient(); Liste Allergien = Arrays.asList (neue Allergie (...), neue Allergie (...)); p.setAllergies (Allergien) ' – davidxxx

+0

Got it. Danke vielmals. –

Verwandte Themen