我对 Java 比较陌生,正在为在线游戏 Minecraft 编写扩展/插件。
我最近开始了“更大”的项目,需要更多的类来保持整洁。 我仍在尝试完全理解构造函数是如何工作的,但最近的尝试导致了堆栈溢出(一个构造函数在循环中调用另一个构造函数)。
以我为例,我有两个类,Main
和 MySQL
。
主类初始化插件,MySQL类联系数据库并将数据返回给任何调用它的类。
有问题的代码示例:
Main.java
class Main extends JavaPlugin {
private final MySQL mysql = new MySQL();
//Method which is called first
void onEnable(){
//Just an example of initializing
mysql.init();
mysql.open();
}
}
MySQL.java
class MySQL {
private final Main main = new Main();
void init(){}
void open(){}
}
我知道问题是什么,我只是不知道正确的解决方案,这将适用于更多的类。
另外,如果我有另一个类,main 将连接到 MySQL,另一个类将与其通信,我应该做类似 main.mysql.method 的事情?
关于构造函数和实例(“new”关键字)如何工作的简单、易于理解的解释将不胜感激。 提前致谢!
最佳答案
首先,作为 future 应用程序的指针,您可能需要查看 Design Patterns ,它们往往会使设计更简洁、更易于维护。
在您的情况下,您创建了 Circular Reference 。解决这个问题的最简单方法是制作如下内容:
class Main extends JavaPlugin {
private final MySQL mysql;
public Main(MySQL mysql)
{
this.mysql = mysql
}
//Class which is called first
void onEnable() {
//Just an example of initializing
mysql.init();
mysql.open();
}
}
class MySQL {
private final Main main = new Main(this);
void init(){}
void open(){}
}
这应该可以解决问题。
话虽这么说,我假设 MySQL
类将具有与数据库相关的机制。此类机制通常通过 Singleton 公开设计模式。这种设计模式应该允许您仅在需要时访问 MySQL
类中的方法,从而也避免了循环引用问题。
关于java - 如何正确连接类(构造函数中的堆栈溢出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880577/