试图获得另一个课时的问题

时间:2014-10-29 18:19:24

标签: java eclipse bukkit

我编写了getPlugin()方法,以便能够从另一个类中获取主类。

public class Main extends JavaPlugin {
    public Main getPlugin() {
        return this;
    }
}

但是当我试着打电话时......

public class Arena {
    private Main plugin = Main.getPlugin();
}

... Eclipse给出了以下错误:

  

无法对Main类型

中的非静态方法getPlugin()进行静态引用

我使用静态,但静态在很多不同的地方给了我一些问题,而且我已经看到静态通常是做事的坏方法。导致内存泄漏和内容。

我尝试过使用getter和setter,但那些也需要是静态的吗? 我一直在使用的代码非常混乱,我希望找到一种更清晰的方式来访问另一个类。

2 个答案:

答案 0 :(得分:1)

如果要避免使用静态方法,则需要将变量作为参数传递给对象的构造函数。在您的示例中,它将如下工作:

public class Arena {
     private final Main plugin;
     public Arena(Plugin plugin) {
         this.plugin = plugin;
     }
}

然后你可以从主插件类创建一个Arena,并传入this作为参数:

public class Main extends JavaPlugin {
    @Override
    public void onEnable() {
        Arena arena = new Arena(this);
    }
}

答案 1 :(得分:0)

出现此问题的原因是getPlugin()超类中已存在JavaPlugin方法,因此当您执行Main.getPlugin()时,您尝试调用非静态方法。 此外,您自己的方法是非静态的。

我是这样做的。 您必须使用其他名称并使其成为静态名称。此外,您应该在onEnable()上初始化其值。

public final class Example extends JavaPlugin {
    private static Plugin main;
    public static Plugin getMain() {
        return main;
    }
    @Override
    public void onEnable() {
        main = this;
    }
}