我正在为CraftBukkit编写一个插件,并且已经进入了将类和方法拆分为单独文件以进行组织的阶段。我遇到的问题是我需要将Plugin传递给其他类才能使用它的方法。例如:
SimpleBans.java
public class SimpleBans extends JavaPlugin {
private final DatabaseManager dm = new DatabaseManager(this);
}
DatabaseManager.java
public class DatabaseManager {
private Plugin plugin;
public DatabaseManager(SimpleBans pluginConstructor) {
plugin = pluginConstructor;
}
public void writeData(String SQL) {
// Pseudo code: Write plugin.getName(); into the database.
}
现在工作正常。但是,如果我想使用另一个类的writeData
方法,我没有任何东西要作为参数传递,例如:
PlayerListener.java
public class PlayerListener {
private final DatabaseManager dm = new DatabaseManager(SOMETHINGGOESHERE);
}
我不能在这里使用null,因为它必须是一个插件来匹配DatabaseManager.java
中的构造函数参数。
这一直困扰着我多年。任何帮助都会受到欢迎。
答案 0 :(得分:1)
为什么不使用带有null参数的构造函数?有原因吗?那你的课就是......
public class DatabaseManager {
private Plugin plugin;
public DatabaseManager() {
this.plugin = new SimpleBeans();
}
public DatabaseManager(SimpleBans pluginConstructor) {
plugin = pluginConstructor;
}
public void writeData(String SQL) {
// Pseudo code: Write plugin.getName(); into the database.
}
...
}
然后可以使用两种方式实例化DatabaseManager
。
希望我帮忙!
答案 1 :(得分:0)
在DatabaseManager
内创建类似以下内容的方法:
public class DatabaseManager {
public static DatabaseManager initManager() {
SimpleBans simpleBans = new SimpleBans(); //Or however you construct it
return new DatabaseManager(simpleBans);
}
}
然后在其他课程中,只需致电:
private final DatabaseManager dm = DatabaseManager.initManager();
我相信这是一种设计模式,但我忘了它的名字。
答案 2 :(得分:0)
请勿尝试在DatabaseManager
内创建新的PlayerListener
。相反,将DatabaseManager
作为侦听器类的构造函数参数。这样,您可以在创建侦听器时使用已构造的DatabaseManager
。