Referenzen auf Objekte

Foermchen82

Top Contributor
Hallo zusammen,

ich stehe grade auf dem schlauch. Es geht um die Übergabe eines Objektes in einem Konstruktor.

Ich habe ein Objekt A. Die hat als Member einen Listener, der beim Start null ist. Während der initialisierung wird dieser Listener(immernoch null) als Parameter im Konstruktor eines Objektes B verwendet.

Währenden der Laufzeit passiert es, dass in Objekt A durch einen Dialog die Methode A.setListener aufgerufen wird. Somit ist der Listener nicht mehr null.

Jetzt habe ich gedacht, das automatisch in B auch der Listener gesetzt ist, da ich ja im Konstruktor von B die Referenz übergeben habe. Leider ist dem nicht so. Sondern in B ist der Listener immer noch null.

Ich glaub ich hab da ein Verständnisproblem was die Referenzen an geht!
 
Hast du auch Quellcode?

Referenzen muss man zuweisen
Java:
Objekt einObjekt = new Objekt(new Objekt(null));

class Objekt {

Objekt objekt = null;

public Objekt (Objekt einObjekt) {
   this.objekt = einObjekt;
}
}
 
Ich hab nur Pseudocode, da der Rest zu umfangreich ist:

[Java]
public class A {

private Listener listener = null;
private B objectB = null;
public A(){
this.objectB = new B(listener);
}

public void setListener(Listener listener){
this.listener = listener;
}
}


public class B {

private Listener listener = null;
public B(Listener listener){
this.listener= listener;
}
}


[/Java]
 
Java kennt nur call by value.
In Deinem Fall übergibst Du im Konstruktor null und beide Objekte enthalten jetzt jeweils eine unabhängige Variable, die auf null "zeigt". Also beide referenzieren zu dem Zeitpunkt auf dasselbe Objekt bzw. null, es handelt sich aber nicht um eine gemeinsame Referenz die sich A und B teilen. Dadurch kannst Du in A die Referenz auf ein anderes/neues Objekt umbiegen ohne, dass es Auswirkungen auf die Referenzvariable in B hat.
 
Ach so. Und bei Listen als Parameter funktioniert das nur, weil man da nicht das Objekt selbst verändert, sondern den Inhalt der Liste.
Na dann werd ich das wohl umstricken müssen.

Danke!
 

Zurück
Oben