0

作为一种习惯,我通常避免在我的 java 项目中将事物保存在静态方法中以进行测试和易于使用。然而,在过去,我不得不使用围绕我的主类旋转的静态和非静态方法的混乱组合,因为我只知道创建类的非静态实例的一种方法。通常,我将其作为全局变量执行,而不是在每个方法中加载类方法。

例如,假设我有 MainGUI 和 ProjMain 类。在 ProjMain 中,我使用全局变量:

private MainGUI gui = new MainGUI();

这很好用,但是如果我想从 MainGUI 类访问 ProjMain 类中的方法,我自然也会这样做。

private ProjMain project = new ProjMain();

在此,我创建了一个 StackOverflowError。有没有一种简单的方法可以将类的实例作为变量获取,而不必将变量放在单独的方法中而不是全局方法中?

4

2 回答 2

2

气垫船的解决方案非常好,这里我有另一个给你:

如果你有很多类相互引用,你应该考虑为它们提取一个更高的层,更高的层类应该是这样的:

class HigherLayer {
    public void dosomething(ProjMain pm, MainGUI  mg){
         pm.hello(mg);
         mg.bye(pm);
    }
}

并从 ProjMain 和 MainGUI 中删除全局变量,以减少它们的耦合。

于 2013-03-02T05:35:55.037 回答
1

您的类相互引用,这是可以的,但如果每个类都创建对另一个的新引用,则不会这样做,因为这只会导致无限递归,其中一个创建另一个实例,这会创建第一个实例,它创建了另一个的实例,它创建了第一个的实例,它创建了另一个的实例,......等等......

为了解决这个问题,让一个对象创建另一个对象,但只需通过它的构造函数或 setter 方法将对自身的引用传递给另一个对象

比如第一堂课:

public class FirstClass {
   private SecondClass secondClass;

   public FirstClass() {
     secondClass = new SecondClass(this);
}

和其他班级

public class SecondClass {
   private FirstClass firstClass;

   public FirstClass(FirstClass firstClass) {
     this.firstClass = firstClass;
}
于 2013-03-02T05:22:09.553 回答