【问题标题】:Calling method in object from object within it从对象中的对象调用对象中的方法
【发布时间】:2013-05-25 18:58:44
【问题描述】:

我有以下问题,不知道如何解决。假设我们有一个类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。我该怎么做?

【问题讨论】:

    标签: java class object methods


    【解决方案1】:

    简单...只需将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
        }
    }
    

    【讨论】:

    • 谢谢,真的很有帮助。我不知道参考资料等,但知道我可以看到这看起来像是一个愚蠢的问题:P。非常感谢!
    【解决方案2】:

    您可以将 ClassA 的引用传递给 ClassB 中的构造函数,例如

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

    但是,如果您在正在构建的类的实例上调用方法,则需要小心。该类可能尚未完成构建,可能处于不完整状态。

    【讨论】:

    • 是的,必须有更好的事件处理策略。 OP需要弄清楚这一点:)也许有静态方法来获取适当的数据? :)
    • 我知道当它是一个事件时它可以更容易地完成。我只是以事件处理程序为例,因为必须调用 objectA 的方法是事件处理程序调用的方法的结果,但我认为这将是更多信息而不是有用:P
    • @user1816721 我很高兴能帮上忙。想想布赖恩阿格纽所说的话。仅当您完全确定该类已完全构建时才使用它:)
    【解决方案3】:

    您需要将构造函数添加到您的 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);
    }
    

    【讨论】:

      【解决方案4】:

      ClassB中,你想调用ClassA的方法。这并不难做到,但我相信你的关系不正确。

      • 如果您使用的是当前代码:您需要将ClassA 的实例传递给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();
        }
        
      • 如果您想反转两者之间的关系: 与其在 classA 中拥有一个依赖 classA 来完成其工作的 classB 实例,不如使用 @ 987654331@ 是主要对象,并让它包含classA 的实例。

      【讨论】:

        猜你喜欢
        • 2016-10-11
        • 2016-02-11
        • 2021-12-28
        • 1970-01-01
        • 2022-12-09
        • 2012-06-10
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多