2016-04-17 8 views
0

traf ich ein Problem, ich habe zwei Klasse class A und class B sie wie folgt aussehen:Java - Wenn Klasse A die Klasse B aufrufen, in Klasse B wie kann ich die Methode und das Attribut der Klasse A verwenden?

class A{ 
private String s; 
public a1(){ 
    // do something with s 
    B b = new B(); 
    b.b1(); 
    // do others things 
} 
public a2(){ 
// this needs s which has been initialised in method a1 
} 
} 

class B{ 
public b1(){ 
// do something 

// here, how can I call method a2 and use String s in a2? 
A a = new A(); 
a.a2(); 
// ... 
} 
} 

Wie kann ich den Wert von String s halten, wenn wir die Methode a2 nennen? Und ich mag nicht b.b1(s) in a2 und a.a2(s) in b1 verwenden.

Vielen Dank für Ihre Vorschläge.

+1

Huh? Wenn "s" ein Datenelement der Klasse A ist, warum glauben Sie dann, dass a2() keinen Zugriff auf s hat? Ihre Klassendefinitionen sind sehr seltsam - sieht aus wie eine zirkuläre Abhängigkeit. A verwendet B und B verwendet A. Vielleicht müssen Sie überdenken, was Sie erreichen möchten. Und geben Sie Klassen sinnvolle Namen. – OldProgrammer

+0

@OldProgrammer danke, ich dachte in Klasse B wir machen neue Instanz ('A a = new A(); a.a2();'), so denke ich, in dieser neuen Instanz kann es keinen Zugang zu haben s. Mache ich einen Fehler? –

+0

@ShireResident danke, ich habe Ihren Punkt, das Problem ist, wie kann ich das gleiche 's' in Klasse B verwenden, wenn es die Methode a2 aufrufen? –

Antwort

1

Sie sollten den Aufruf Instanz von A in b1 injizieren:

public b1(A a) { 
    ... 
} 

um zu vermeiden, eine neue A in diesem Verfahren zu erstellen. Dann in a1, können Sie es nennen mag:

b.b1(this); 

Dies ist bekannt als dependency injection: die Bearbeitung von b1 hängt von einer Instanz von A, so dass Sie diese Abhängigkeit injizieren.

+0

Vielen Dank für Ihre Antwort, aber auf Ihre zweite Art, müssen wir eine neue Instanz 'A' in Methode b1 erstellen, um' a2() ', nicht wahr? –

+0

Sicher. Wie ich sage "* wenn * alles was du wirklich brauchst ist der Wert von' s' ". Es wird lediglich darauf hingewiesen, dass Sie die Instanz, die die gewünschten Daten enthält, nicht immer injizieren müssen. Sie können einfach die Daten injizieren. –

Verwandte Themen