0

次の問題があり、解決方法がわかりません。classclassAがあり、この class には、クラス自体のオブジェクトを作成する main メソッドがあるとします。次に、別のクラスを受講しclassBます。のコンストラクターでclassA、 のオブジェクトを作成しますclassB。のメソッドで のメソッドclassBを呼び出したいと思いclassAます。

例を挙げましょう。

public class classA {
    public classA() {
        //some code
        classB objectB = new classB();
    }

    public static void main(String[] args) {
        classA objectA = new classA();
        //more code
    }

    public void methodA() {
        //even more code
    }
}

public class classB {
    public void someListener() {
        //code needed to call methodA of the object objectA
    }
}

問題は次のとおりです。コードは何になるでしょうか。今はコメントだけ//code needed to call methodA of the object objectAです。

私がこのような状況にある理由は、それを使用しようとしているコードでは、objectBループによって制御されて実行されているさまざまなメソッドがあるためですが、特定のことが発生すると、ここに示されているメソッドが必要になるobjectAためです。呼ばれます。どうすればいいですか?

4

4 に答える 4

2

シンプル...クラスAオブジェクトの参照をクラスBのオブジェクトに渡すだけです。クラスBに参照を保存させ、必要に応じてAのメソッドを呼び出します。

新しいコード (コメント済み)

public class classA{
    classA{
        //some code
        classB objectB = new classB(this);  //------------- pass reference here
    }
    public static void main(String[] args){
        classA objectA = new classA();
        //more code
    }
    public void methodA(){
        //even more code
    }
}

public class classB{
    private classA storedReference = null; //------------- you need a variable of classA to store the reference

    public classB(classA passedObject){   //------------- you need an appropriare constructor
        storedReference = passedObject;   //------------- store the classA object reference
    }

    public void someListener(){
        storedReference.methodA();       //------------- call methods whenever necessary
        //code needed to call methodA of the object objectA
    }
}
于 2013-05-25T19:02:06.103 に答える
1

ClassA への参照を ClassB のコンストラクターに渡すことができます。

class ClassB(ClassA ref) {
    ref.someMethod();
}

ただし、作成中のクラスのインスタンスでメソッドを呼び出す場合は注意が必要です。クラスの構築が完了しておらず、不完全な状態である可能性があります。

于 2013-05-25T19:02:41.440 に答える
0

ClassB、 のメソッドを呼び出しますClassA。難しいことではありませんが、あなたの人間関係は間違っていると思います。

  • 現在のコードを使用している場合:ClassAのインスタンスをtoに渡す必要があります。これは、演算子ClassBを使用して実現できます。this

    public classA() {
        //some code
        classB objectB = new classB();
        objectB.someListener(this);
    }
    

    クラスB:

    public void someListener(classA theClassA) {
        //code needed to call methodA of the object objectA
        theClassA.methodA();
    }
    
  • 2 つの関係を逆にしたい場合:classBのインスタンスをにclassA依存してclassA動作さ せる代わりにclassB、支配的なオブジェクトになり、 のインスタンスを含むようにしますclassA

于 2013-05-25T19:13:06.753 に答える
0

classA を参照として渡すことができるように、classB にコンストラクターを追加する必要があります。

したがって、classB は次のようになります。

public class classB {
    classA cA;

    public classB(classA cA) {
        this.cA = cA;
    }

   public void someListener(){
        cA.methodA();
   }

}

そしてあなたのclassAコンストラクター:

classA{
    //some code
    classB objectB = new classB(this);
}
于 2013-05-25T19:06:02.507 に答える