创建实例
问题描述:
有人告诉我,如果我想用我的主类的实例,我应该有一个构造函数做到这一点:创建实例
private <Main_Class_Name> plugin;
public <class_name>(<Main_Class_Name> plugin) {
this.plugin = plugin;
}
为什么这更好的(或者是怎么做的不仅仅是这样做?
private <Main_Class_Name> plugin = new <Main_Class_Name>();
答
你不应该使用第二种模式,因为你不应该实例化你的主类。 也就是说,应该只有一个主类的实例,即由插件管理器创建的实例。
在我看来,第一种模式需要太多的工作。 相反,implement the Singleton Pattern。
反正JavaPlugin
扩展PluginBase
它实现Plugin
,所以你甚至可以这样做:
MainClass main = (MainClass)Bukkit.getServer().getPluginManager().getPlugin("Plugin_Name");
答
不能用于存储你的主要插件实例的第二种方式,因为它的重建已建成的插件,但存储您的主要插件实例最好的办法是将其保存到一个公共的静态字段onEnable方法。
答
随着Bukkit,你可以创建你的主要插件(JavaPlugin
)类的一个实例,像这样的东西:
public class MyPlugin extends JavaPlugin {
public static MyPlugin instance;
public void onEnable() {
instance = this;
}
}
Bukkit在内部实例化插件,但在服务器中处于活动状态的插件的实例上调用onEnable()
。这似乎是一个普遍接受的方法。
第一个是单身人士。没有什么比这更好的了。谁告诉你这个被误导了。现在,除了请__ [游览] __并了解本网站的预期问题。 – Unihedron
@Unihedron - 我不认为这个问题是“超出范围”,因为OP想知道两个陈述之间的区别。如果他只想知道哪一个更好,那将是另一回事 – bestprogrammerintheworld