Minecraft 插件 -getInstance

问题描述 投票:0回答:2

我使用静态对象是为了在另一个类中使用JavaPlugin, 但我不明白为什么

instance = this;
要写在
onEnable()
里面。

为什么我们声明的时候不能写

private static Main instance;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

    private static Main instance;

    @Override

    public void onEnable(){

        instance = this;

        saveDefaultConfig();

        Bukkit.getPluginManager().registerEvents(new Event() , this);

    }
    public static Main getInstance() {

        return instance;
    }

}
java minecraft bukkit
2个回答
1
投票

我会使用构造函数。

二级代码:

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class Event implements Listener {

    Main plugin;

    public Event(Main plugin) {
        this.plugin = plugin;
    }

    //now you can use plugin as instance.
    plugin.getLogger().info("info");

}

主要课程:

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

    private static Main instance;

    @Override

    public void onEnable(){


        saveDefaultConfig();

        Bukkit.getPluginManager().registerEvents(new Event(this) , this);

    }

}

0
投票

static
意味着您不需要类的实例(如
new Main()
)来访问
field
method
(类也可以是静态的)。

例如使用静态方法你可以做

Main.method();

而不是

new Main().method();

this
引用类实例。因此,当您调用
static
方法时,没有
this
引用,因为没有类实例。


因此,根据我的理解,这里发生的情况是,您的插件框架创建了一个新实例并调用方法

onEnable()
,如下所示:
new Main().onEnable()
。由于
onEnable()
不是静态的,您可以访问
this
并将其分配给
static
变量。因此,之后您可以从
static instance
方法的
static
上下文中访问该
getInstance()
变量。

© www.soinside.com 2019 - 2024. All rights reserved.