[英]How can I get my main class returned?
該主類由Bukkit框架初始化,無法再次初始化。
public class Demo extends JavaPlugin {
public void onEnable() {
}
}
如何從其他類訪問其唯一實例?
public class CoolDown extends BukkitRunnable {
public CoolDown(Demo mainClass, int time) {
}
public void run() {
}
}
如果要使用OOP方式:在CoolDown
類中,有一個類型為Demo
的字段(或JavaPlugin擴展類)。 您還可以創建將在此處的構造函數中傳遞的任何其他字段。
private final Demo plugin;
private int time;
然后使用CoolDown的構造函數實例化字段
public CoolDown(Demo plugin, int time) {
this.plugin = plugin;
this.time = time;
}
現在,您可以使用plugin
字段來滿足您的需求。 例:
public void run() {
plugin.fooBar();
}
如果您想使用靜態編程方式 (不建議使用Java,是OOP語言!):在您的Demo
類中,有一個Demo
類型的靜態公共字段,沒有任何值(這是在類分解之后,順便說說)。
public static Demo instance;
在您插件的enable方法中(我建議將其放在方法調用的第一行):
instance = this;
然后,您可以在CoolDown
的run()
方法調用中使用:
Demo.instance.fooBar();
再一次,我不建議在Java中使用靜態編程。 一般來說,這是一個懶惰的壞習慣。
這是您在OOP編程中的完整示例:
public class Demo extends JavaPlugin {
public void onEnable() {
Bukkit.getScheduler.scheduleMyEpicCooldown(new CoolDown(this, time), time);
}
}
public class CoolDown extends BukkitRunnable {
private final Demo plugin;
private int time;
public CoolDown(Demo plugin, int time) {
this.plugin = plugin;
this.time = time;
}
public void run() {
plugin.fooBar();
}
}
您必須重新發明Singleton Pattern 。
public class Demo extends JavaPlugin {
private static Demo instance;
public Demo() {
instance = this;
}
public static Demo getInstance() {
return instance;
}
@Override
public void onEnable() {
}
}
要訪問:
public class Cooldown extends BukkitRunnable {
@Override
public void run() {
Plugin main = Demo.getInstance();
main.getServer().broadcastMessage("No need to have the main instance as member variable on each class.");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.