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

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


但是当我尝试称呼它时...

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


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


  无法从类型Main中静态引用非静态方法getPlugin()


我使用过static,但是static在很多不同的地方都会给我带来麻烦,而且我已经看到static通常是做事情的一种坏方法。导致内存泄漏和东西。

我试过使用getter和setter,但是这些也需要是静态的吗?
我一直在使用的代码非常凌乱,我想找到一种访问另一个类的更简洁的方法。

最佳答案

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

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);
    }
}

09-30 22:50