作为一种习惯,我通常会避免在我的java项目中使用静态方法进行测试和易于使用。但是,在过去,我不得不使用围绕我的主类的混乱的静态和非静态方法,因为我只知道创建类的非静态实例的一种方法。通常,我将此作为全局变量,而不是在每个方法中加载类方法。
举个例子,假设我有类MainGUI和ProjMain。在ProjMain中,我使用全局变量:
private MainGUI gui = new MainGUI();
这非常有效,但是如果我想在MainGUI类中访问ProjMain类中的方法,我自然会去做同样的事情。
private ProjMain project = new ProjMain();
在此,我创建了一个StackOverflowError。有没有一种简单的方法可以将类的实例作为变量,而不必将变量放在单独的方法而不是全局方法中?
答案 0 :(得分:2)
Hovercraft的解决方案非常好,我在这里有另一个解决方案:
如果你有很多类相互引用,你应该考虑为它们提取更高层,更高层的类应该是这样的:
class HigherLayer {
public void dosomething(ProjMain pm, MainGUI mg){
pm.hello(mg);
mg.bye(pm);
}
}
从ProjMain和MainGUI中删除全局变量,使它们更少耦合。
答案 1 :(得分: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;
}