不能使用"这个"由于静态方法,但我必须

时间:2015-10-17 20:58:05

标签: java

我的主要课程从这开始:

public class ranks extends JavaPlugin implements Listener{

在该课程中,我有:

public static boolean isAdmin(String playerName){

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

问题在于我无法使用"这个"。 isAdmin必须是静态的,因为在另一个类中:

public class customInventory implements Listener{

我需要使用以下方式访问它:

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

作为概述,rank使用customInventory中的方法,反之亦然。谷歌搜索静态方法而不能使用"这个"没有任何帮助。

4 个答案:

答案 0 :(得分:1)

静态方法属于类,而不是特定的实例。 this是指一个实例,而您没有实例。在调用方法之前,您需要使isAdmin方法成为实例方法(删除静态)并实例化排名类(使用new关键字)。

请查看此answer以获取有关静态与实例状态的说明。

答案 1 :(得分:0)

在Java中,this指的是当前方法正在运行的对象。但static方法不会对对象起作用,因此this无法引用任何内容。如果getDataFolter()是另一种静态方法,则可以将其称为ranks.getDataFolder()。如果它是一个实例方法,那么您需要以某种方式将相关的ranks实例传递给该方法。

答案 2 :(得分: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
}

答案 3 :(得分:0)

如果没有继承方法getDataFolder,你可以将它设为静态,并在没有"这"。

的情况下调用它。

如果它是继承的,那么你不能使该方法成为静态,那么你需要创建一个秩类的静态实例(单例模式)并使用它来访问该方法。