【问题标题】:How do I reference instances using an instance?如何使用实例引用实例?
【发布时间】:2017-12-20 03:07:15
【问题描述】:

我试图尽量减少创建实例的数量,因为我对 Java 不是特别熟练。目前我的 Main 中有一组其他类的实例,一个简单的例子......

public final class ClassName extends JavaPlugin {

    AntiSwear antiSwear = new AntiSwear();
    Spam spam = new Spam();

    @Override
    public void onEnable() {
        // Plugin startup logic
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}

而不是创建越来越多的实例,我只想创建一个主类的实例 ClassName className = new ClassName(); 并运行类似 className.spam... 的东西

基本上把我的废话换成英文:我只是想看看如何使用实例来引用实例。

【问题讨论】:

  • className.spam 应该可以工作
  • static 关键字是否涵盖了您需要的内容?
  • @PaulHicks static 一个工作:) 谢谢

标签: java class minecraft instances


【解决方案1】:

有几种方法可以解决这个问题。第一种方式是使用public访问修饰符:

public AntiSwear antiSwear = new AntiSwear();
public Spam spam = new Spam();

这使得实例可以从ClassName 的实例中访问,例如:

ClassName className = new ClassName();
className.spam...;
className.antiSwear...;

第二个方法涉及getters and setters,它提供了一个方法,该方法可以被包含实例并且具有访问权限的任何类或子类调用:

AntiSwear antiSwear = new AntiSwear();
Spam spam = new Spam();

public AntiSwear getAnitSwear(){
    return this.antiSwear;
}
public Spam getAnitSwear(){
    return this.spam;
}

现在您可以相应地调用 getter:

ClassName className = new ClassName();
className.getSpam()...;
className.getAntiSwear()...;

第三种方法涉及到static访问修饰符:

public static AntiSwear antiSwear = new AntiSwear();
public static Spam spam = new Spam();

这使得实例可以从每个外部类访问,即使是那些不包含实例的。这是因为:

static 成员属于该类而不是 具体实例。

这意味着 static 字段只有一个实例 存在,即使你创建了一百万个实例 类,否则您不创建任何类。它将由所有实例共享。

例如:

//Notice that I am not creating an instance, I am only using the class name
ClassName.spam...;
ClassName.antiSwear...;

【讨论】:

  • 值得注意的是,对于 Minecraft 模组,唯一真正需要静态的是对主模组类实例本身的引用。 Forge 几乎你做了这件事(我不知道 Bukkit 等),所以你最终会得到,例如,ClassName.classNameInstance.spam,因为主要的 mod 类本质上是一个 Singleton
猜你喜欢
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多