2015-10-17 28 views
-2

我主類始於此:不能使用「本」,由於靜態方法,但我不得不

public class ranks extends JavaPlugin implements Listener{ 

類裏,我有:

public static boolean isAdmin(String playerName){ 

    File adminFile = new File(this.getDataFolder() + File.separator + "admins.txt"); 

的問題是,我不能使用「this」。 isAdmin必須因爲另一個類是靜態的:

public class customInventory implements Listener{ 

我需要使用訪問它:

if(!ranks.isAdmin(e.getPlayer().getName())){ 

作爲概述,位居使用方法從customInventory,反之亦然。谷歌搜索靜態方法,不能使用「這個」沒有任何幫助。

+2

這是Java的慣例,大寫類名的第一個字母 – leeor

+0

也許是這樣。這並不能解決我的問題,雖然 – Rixterz

+0

我覺得人們不高興,因爲我遇到了問題,需要幫助解決它。這就是我首先寫了這個該死的問題。 – Rixterz

回答

0

this表示類的實例。但isAdmin是一個static方法。正如您在嘗試訪問this時看到的那樣,它實際上從未創建過,沒有您可以訪問的實例。

您可以使getDataFolder靜態然後您可以調用它。

設計問題可以通過基本DI解決;

public class Ranks extends JavaPlugin implements Listener{ 
    public boolean isAdmin(String playerName){ 
     //rest of business logic 
    } 
} 


public class CustomInventory implements Listener{ 
    private Ranks rank; 

    public CustomInventory(Ranks rank) { 
     this.rank = rank; 
    } 


    //then call this.rank.isAdmin as usual 
} 
+0

我無法使getDataFolder成爲靜態,因爲它是JavaPlugin中的一個方法 – Rixterz

+0

我認爲那麼你應該有設計問題。將isAdmin放到另一個地方,並提供排名實例作爲方法參數。 –

+0

isAdmin需要在主類中「排名」。 – Rixterz

0

在Java中,this指的是當前方法所代表的對象。但是static方法不會對對象起作用,因此this沒有任何參考。如果getDataFolter()是另一種靜態方法,則可以將其稱爲ranks.getDataFolder()。如果它是一種實例方法,那麼您需要以某種方式將相關的ranks實例傳遞給該方法。

1

靜態方法屬於類,而不是特定的實例。 this是指一個實例,而您沒有。在調用方法之前,您需要使isAdmin方法成爲實例方法(移除靜態)並實例化等級類(使用new關鍵字)。

看看這個answer的靜態與實例狀態的解釋。

+0

現在我在我的服務器上收到一條錯誤消息,說「插件已經初始化!」我有: 'customInventory cI = new customInventory(); \t @Override 公共無效onEnable(){ \t \t \t this.getServer()。getPluginManager()。註冊事件(this,this);' 和customInventory我有: 'ranking r = new ranks();' – Rixterz

+0

看起來代碼有點混亂:爲什麼你需要絕對靜態的方法,如果你是實際上創建了一個實例,並可以通過您提到的那個實例訪問isAdmin方法? – gmconte

+0

除非isAdmin是靜態的,否則我無法訪問customInventory中的ranks.isAdmin。如果isAdmin是靜態的,那麼我不能使用「this」。我應該做些什麼?! – Rixterz

0

如果方法getDataFolder沒有被繼承,你可以把它設置爲靜態的,並在沒有「this」的情況下調用它。

如果它是繼承的,所以你不能使該方法成爲靜態的,那麼你需要創建一個rank類的靜態實例(單例模式)並使用它來訪問該方法。

+0

getDataFolder是JavaPlugin中的一種方法。 – Rixterz

相關問題