我使用静态对象是为了在另一个类中使用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;
}
}
我会使用构造函数。
二级代码:
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);
}
}
static
意味着您不需要类的实例(如 new Main()
)来访问 field
或 method
(类也可以是静态的)。
例如使用静态方法你可以做
Main.method();
而不是
new Main().method();
this
引用类实例。因此,当您调用 static
方法时,没有 this
引用,因为没有类实例。
因此,根据我的理解,这里发生的情况是,您的插件框架创建了一个新实例并调用方法
onEnable()
,如下所示:new Main().onEnable()
。由于 onEnable()
不是静态的,您可以访问 this
并将其分配给 static
变量。因此,之后您可以从 static instance
方法的 static
上下文中访问该 getInstance()
变量。