此主类由Bukkit框架初始化,无法再次初始化。
public class Demo extends JavaPlugin {
public void onEnable() {
}
}
如何从其他类访问其唯一实例?
public class CoolDown extends BukkitRunnable {
public CoolDown(Demo mainClass, int time) {
}
public void run() {
}
}
答案 0 :(得分:3)
如果您想使用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();
}
如果你想使用静态编程方式 (不推荐,你使用的是OOP语言是Java!):在你的Demo
类,有一个类型为Demo
的公共静态字段,没有任何值(顺便说一下,这是在类声明之后)。
public static Demo instance;
在你的插件的启用方法中(我建议把它放在方法调用的第一行):
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();
}
}
答案 1 :(得分:2)
你必须重新发明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.");
}
}