0

我有以下问题,不知道如何解决。假设我们有一个类classA,并且在这个类中是创建类本身的对象的主要方法。现在我们上另一堂课,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。这并不难做到,但我相信你的关系不正确。

  • 如果您使用的是当前代码:您需要传递 to 的实例ClassAClassB这可以使用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();
    }
    
  • 如果你想颠倒两者之间的关系:classB与其让in 的实例classA依赖于classA完成其工作,不如让 haveclassB成为主导对象,并让它包含和 的实例classA

于 2013-05-25T19:13:06.753 回答
0

您需要将构造函数添加到您的 classB,以便您可以将 classA 作为引用传递给它。

所以你的 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 回答