Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class A {
static A a;
static B b;
static C c;
int x = 1;
public static void main (String[] args) {
a = new A();
b = new B(a);
c = new C(a);
}
public A () {
}
}
public class B {
A a;
int y = 2;
public B (A pA) {
a = pA;
//System.out.println(A.c.getZ()); <--- Fehler
}
public int getY() {
return y;
}
}
public class C {
A a;
int z = 3;
public C (A pA) {
a = pA;
}
public int getZ() {
return z;
}
}
Mein Problem liegt darin, dass ich in Klasse b die Variable z aus Klasse c ausgeben möchte.
Nur wenn ich jetzt z.B. in Klasse b
Java:
System.out.println(A.c.getZ())
mache, tritt ja der Fehler auf, dass Klasse b Klasse c nicht kennt, da ja c erst nach b initialisiert wird.
Das halte ich für einen groben Designfehler. Weder A noch B kennen irgendwas von C und haben mit ihr auch rein gar nichts zu tun, warum sollten sie also Zugriff auf deren Variaben besitzen?
Das halte ich für einen groben Designfehler. Weder A noch B kennen irgendwas von C und haben mit ihr auch rein gar nichts zu tun, warum sollten sie also Zugriff auf deren Variaben besitzen?
C muss doch B gar nicht kennen. Und wenn du so ein stark verflochtenes Objektnetz hast, dann wirst du nicht drumherumkommen irgendwas aus irgendeinem Konstruktor auszulagern. Diese Methode rufst du dann auf, wenn alles initialisiert ist.
statt [code=Java] ^^
Ohne das genau gelesen zu haben frage ich mich was du mit A.c.getZ()); machen willst. A ist doch gar kein Bezeichner wenn ich das richtig sehe? Deine lokale Variable heißt pA und deine globale a.
zunächst mal glaube ich auch, wie schon julian.veh, dass A.c.getZ()); keinen sinn macht.
was du machen könntest ist, dass du die Referenz auf das jeweils andre Objekt nach dem konstruieren der Objekte machst. Habe hier mal ein Beispiel:
Java:
public class A {
A a;
B b;
C c;
int x = 1;
public static void main(String[] args) {
A a = new A();
B b = new B();
C c = new C();
a.b = b;
a.c = c;
b.a = a;
b.c = c;
c.a = a;
c.b = b;
System.out.println("x = " + a.x);
System.out.println("y = " + b.y);
System.out.println("z = " + c.z + "\n");
System.out.println("getX() = " + a.getX());
System.out.println("getY() = " + b.getY());
System.out.println("getZ() = " + c.getZ() + "\n");
System.out.println("b.c.getZ() = " + b.c.getZ() + "\n");
System.out.println("a.b.c.getZ() = " + a.b.c.getZ() + "\n");
}
public int getX() {
return x;
}
}
class B {
A a;
B b;
C c;
int y = 2;
public int getY() {
return y;
}
}
class C {
A a;
B b;
C c;
int z = 3;
public int getZ() {
return z;
}
}
Output: -----------------
x =1
y = 2
z = 3
getX() = 1
getY() = 2
getZ() = 3
b.c.getZ() = 3
a.b.c.getZ() = 3
-------------------------
weiß nicht, ob das das ist, was du suchst, und ob das auch die beste lösung ist (glaub aber eher nicht ), aber ich hoffe, das hilft weiter^^