2015-08-15 101 views
3

有人告訴我,如果我想用我的主類的實例,我應該有一個構造函數做到這一點:創建實例

private <Main_Class_Name> plugin; 
public <class_name>(<Main_Class_Name> plugin) { 
    this.plugin = plugin; 
} 

爲什麼這更好的(或者是怎麼做的不僅僅是這樣做?

private <Main_Class_Name> plugin = new <Main_Class_Name>(); 
+2

第一個是單身人士。沒有什麼比這更好的了。誰告訴你這個被誤導了。現在,除了請__ [遊覽] __並瞭解本網站的預期問題。 – Unihedron

+1

@Unihedron - 我不認爲這個問題是「超出範圍」,因爲OP想知道兩個陳述之間的區別。如果他只想知道哪一個更好,那將是另一回事 – bestprogrammerintheworld

回答

1

你不應該使用第二種模式,因爲你不應該實例化你的主類。 也就是說,應該只有一個主類的實例,即由插件管理器創建的實例。

在我看來,第一種模式需要太多的工作。 相反,implement the Singleton Pattern

反正JavaPlugin擴展PluginBase它實現Plugin,所以你甚至可以這樣做:

MainClass main = (MainClass)Bukkit.getServer().getPluginManager().getPlugin("Plugin_Name"); 
0

不能用於存儲你的主要插件實例的第二種方式,因爲它的重建已建成的插件,但存儲您的主要插件實例最好的辦法是將其保存到一個公共的靜態字段onEnable方法。

2

隨着Bukkit,你可以創建你的主要插件(JavaPlugin)類的一個實例,像這樣的東西:

public class MyPlugin extends JavaPlugin { 
    public static MyPlugin instance; 

    public void onEnable() { 
     instance = this; 
    } 
} 

Bukkit在內部實例化插件,但在服務器中處於活動狀態的插件的實例上調用onEnable()。這似乎是一個普遍接受的方法。