我编写了getPlugin()
方法,以便能够从另一个类中获取主类。
public class Main extends JavaPlugin {
public Main getPlugin() {
return this;
}
}
但是当我试着打电话时......
public class Arena {
private Main plugin = Main.getPlugin();
}
... Eclipse给出了以下错误:
无法对Main类型
中的非静态方法getPlugin()进行静态引用
我使用静态,但静态在很多不同的地方给了我一些问题,而且我已经看到静态通常是做事的坏方法。导致内存泄漏和内容。
我尝试过使用getter和setter,但那些也需要是静态的吗? 我一直在使用的代码非常混乱,我希望找到一种更清晰的方式来访问另一个类。
答案 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;
}
}