首页 > 解决方案 > 在两个不同的类中调用方法:调用彼此的方法

问题描述

我有 2 个不同的类,它们都相互调用方法。出于某种原因,当我在已经有一个从另一个类调用的对象的类中添加一个对象时,它给了我一个堆栈溢出错误。这是我正在处理的问题:

A类:

public class ClassA {
    ClassB objA = new ClassB();
}

B类:

public class ClassB {
  ClassA objB = new ClassA();
}

尝试运行时出现以下错误:

Exception in thread "main" java.lang.StackOverflowError
    at package.ClassB.<init>(ClassB.java)
    at package.ClassA.<init>(ClassA.java:26)
    at package.ClassB.<init>(ClassB.java:17)

第 26 行和第 17 行是创建对象的位置(如我上面的示例)。我的错误示​​例的底部 2 行重复至少 50 次。

标签: javaobjectmethods

解决方案


创建 的实例时ClassA,会创建 的实例ClassB

创建 的实例时ClassB,会创建 的实例ClassA

因此,当创建这些类中的任何一个的实例时,您会启动一系列无限实例创建,从而导致StackOverflowError.

如果您需要ClassA保存对某个实例的引用,ClassB反之亦然,我建议您不要在一个类内部创建另一个类的实例,而是在 setter 方法中传递对已创建实例的引用:

public class ClassA {

    ClassB objA;


    public setB (ClassB b) {
        objA = b;
    }
}

public class ClassB {

    ClassA objB;

    public setA (ClassA a) {
        objB = a;
    }

}

然后以这种方式创建实例:

ClassA a = new ClassA();
ClassB b = new ClassB();
a.setB(b);
b.setA(a);

推荐阅读