2016-04-17 11 views
0

私は1つの問題に会った、私は彼らがどのように見える2クラスclass Aclass Bている:私たちはメソッドA2を呼び出すとき、どのように私はString sの値をJava-クラスAがクラスBを呼び出すとき、クラスBでクラスAのメソッドと属性を使用するにはどうすればよいですか?

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(); 
// ... 
} 
} 

を保つことができますか? そして、私はa2にb.b1(s)、そしてb1にはa.a2(s)を使用するのが嫌いです。

ありがとうございます。

+1

? "s"がクラスAのデータメンバーである場合、なぜa2()はsにアクセスできないと思いますか?あなたのクラス定義は非常に奇妙です - 循環依存のように見えます。 AはBとBを使用しています。あなたが達成しようとしていることを再考する必要があるかもしれません。クラスに意味のある名前を付ける。 – OldProgrammer

+0

@OldProgrammerありがとう、私はクラスBで新しいインスタンス( 'A a = new A(); a.a2();')を作ったと思ったので、この新しいインスタンスでは、 s。私は間違いをしますか? –

+0

@ShireResidentありがとう、私はあなたのポイントを持って、問題はどのようにメソッドのa2を呼び出すときにクラスBで同じ 's'を使用することができますか? –

答えて

1

あなたはb1Aの呼び出しインスタンスを注入する必要があります。その方法で新しいAを作成する必要を避けるために

public b1(A a) { 
    ... 
} 

。その後、a1に、あなたはそれが好きで呼び出すことができます。

b.b1(this); 

これはdependency injectionとして知られている:b1の作業がAのインスタンスに依存するので、あなたはその依存関係を注入します。

+0

あなたの答えはありがとうございますが、2番目の方法では、a2()を呼び出すためにメソッドb1に新しいインスタンスAを作成する必要がありますか? –

+0

あなたが実際に必要とするのは 's'の値です。必要なデータが含まれているインスタンスを挿入する必要はないと指摘しているだけで、データを注入することができます。 –

関連する問題