我的主要课程从这开始:
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中的方法,反之亦然。谷歌搜索静态方法而不能使用"这个"没有任何帮助。
答案 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,你可以将它设为静态,并在没有"这"。
的情况下调用它。如果它是继承的,那么你不能使该方法成为静态,那么你需要创建一个秩类的静态实例(单例模式)并使用它来访问该方法。