簡體   English   中英

我如何才能返回主班?

[英]How can I get my main class returned?

該主類由Bukkit框架初始化,無法再次初始化。

public class Demo extends JavaPlugin {
    public void onEnable() {

    }
}

如何從其他類訪問其唯一實例?

public class CoolDown extends BukkitRunnable {
    public CoolDown(Demo mainClass, int time) {

    }
    public void run() {

    }
}

如果要使用OOP方式:CoolDown類中,有一個類型為Demo的字段(或JavaPlugin擴展類)。 您還可以創建將在此處的構造函數中傳遞的任何其他字段。

private final Demo plugin;
private int time;

然后使用CoolDown的構造函數實例化字段

public CoolDown(Demo plugin, int time) {
    this.plugin = plugin;
    this.time = time;
}

現在,您可以使用plugin字段來滿足您的需求。 例:

public void run() {
    plugin.fooBar();
}

如果您想使用靜態編程方式 (不建議使用Java,是OOP語言!):在您的Demo類中,有一個Demo類型的靜態公共字段,沒有任何值(這是在類分解之后,順便說說)。

public static Demo instance;

在您插件的enable方法中(我建議將其放在方法調用的第一行):

instance = this;

然后,您可以在CoolDownrun()方法調用中使用:

Demo.instance.fooBar();

再一次,我不建議在Java中使用靜態編程。 一般來說,這是一個懶惰的壞習慣。

這是您在OOP編程中的完整示例:

public class Demo extends JavaPlugin {
    public void onEnable() {
        Bukkit.getScheduler.scheduleMyEpicCooldown(new CoolDown(this, time), time);
    }
}


public class CoolDown extends BukkitRunnable {
    private final Demo plugin;
    private int time;

    public CoolDown(Demo plugin, int time) {
        this.plugin = plugin;
        this.time = time;
    } 

    public void run() {
        plugin.fooBar();
    }
}

您必須重新發明Singleton Pattern

public class Demo extends JavaPlugin {
    private static Demo instance;
    public Demo() {
        instance = this;
    }
    public static Demo getInstance() {
        return instance;
    }
    @Override
    public void onEnable() {

    }
}

要訪問:

public class Cooldown extends BukkitRunnable {
    @Override
    public void run() {
        Plugin main = Demo.getInstance();
        main.getServer().broadcastMessage("No need to have the main instance as member variable on each class.");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM