我有两种方法在主类中,一种在名为'DeleteWall'的类中。我正在创建每个类的实例,以便可以访问它们的方法。我已经阅读了stackOverflows上的所有文章,但我没有看不到我在做错什么...就像我无论如何都不会循环播放它来建立新实例一样,我将像intellij所说的那样突出显示导致错误的行。我只是一次调用演示 哦,方法“ delNode”在主类中,因此它是“ werk”的实例。
//Main class
DeleteWall ok=new DeleteWall(); //error line
public void demo(){
System.out.println("running");
ok.delWalls(30,0,30,30);
System.out.println("didnt stop");
}
//DeleteWall class
public class DeleteWall {
Main werk = new Main(); //error line
public void delWalls(int Sx, int Sy, int Ex, int Ey) {
werk.delNode(Sx, Sy, Ex, Ey);
}
}
答案 0 :(得分:4)
主要问题减少到
public class Main {
DeleteWall ok = new DeleteWall();
}
和
public class DeleteWall {
Main werk = new Main();
}
如果这些类中的任何一个被实例化,则必须创建另一个类的实例,该实例又将再次创建第一个的 new 实例,依此类推。 整个设计都是 strange ,就像声明每个房屋始终包含一辆汽车,而每辆汽车始终包含一个房屋一样。
解决问题:让DeleteWall
接收Main
的实例,而不是创建一个新的实例。一些可能性:
在构造函数中
public class Main {
DeleteWall ok = new DeleteWall(this);
}
////
public class DeleteWall {
Main werk;
public DeleteWall(Main main) {
werk = main;
}
}
致电时
public class Main {
DeleteWall ok = new DeleteWall();
public void demo() {
ok.delWalls(this, 30, 0, 30, 30);
}
}
////
public class DeleteWall {
public void delWalls(Main werk, ...) {
werk.delNodes(...);
}
}
(还有许多其他可能性,这在很大程度上取决于程序应该执行的操作,问题的建模方式,偏好等等)
答案 1 :(得分:3)
您在DeleteWall
中有一个Main
的实例,在Main
中有一个DeleteWall
的实例。现在,当它尝试创建Main
类时,将需要为字段DeleteWall
创建一个DeleteWall ok= new DeleteWall();
实例,而它需要创建一个{{ 1 {}中的Main
中的字段Main werk = new Main();
。然后返回创建Main,然后就可以进行无限循环了。