2015-10-17 25 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

相关问题