java - 如何在 Java 中使用单独的枚举类引用静态类?

标签 java class enums static

这是我当前的枚举类:

public enum BuildingType {
MINER("Miner", "A basic slave." (*, Miner (separate class)*)), FARM("Farm", "Old Macdonald's Crib."), BAKERY("Bakery", "Best Cookies in Town!"), FACTORY("Factory", "Highest Quality Memes in town!"), QUARRY("Quarry", "Let's get drilling!");

private String name;
private String description;
//private Class clazz;

BuildingType(String name, String description (* Possible to put Class clazz reference here? *)) {
    this.name = name;
    this.description = description;
    //this.clazz = clazz
}

public String getName() {
    return name;
}

public String getDescription() {
    return description;
}

public Class getReferencedClass() {
    //Return referenced "clazz" above
}
}

正如评论和(* *)中所说,是否可以在枚举中引用静态类,以便我可以通过引用构建类型来更改该类中的静态值?

例如

BuildingType.MINER.getReferencedClass.setCookiesPerSecond(4);

谢谢大家,
雅科:)

最佳答案

您可以使用反射来做到这一点,但是最好有一个该类的实例,该实例实现了所有其他实现都实现的接口(interface),即使该接口(interface)只有一个实例,例如

enum StaticData implement IData {
    INSTANCE; // only one instance

    /* put your non static fields here */

    /* put your methods for IData here */
}

public enum BuildingType {
    MINER("Miner", "A basic slave.", StaticData.INSTANCE), FARM("Farm", "Old Macdonald's Crib."), BAKERY("Bakery", "Best Cookies in Town!"), FACTORY("Factory", "Highest Quality Memes in town!"), QUARRY("Quarry", "Let's get drilling!");

// later
BuildingType.MINER.getIData().setCookiesPerSecond(4);

关于java - 如何在 Java 中使用单独的枚举类引用静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35722507/

相关文章:

java - Android 中如何获取源类文件的包名?

java - 创建一个包含大量静态字段的常量类是否可以?

java - 在带有 ENUM 和 FINAL 变量的 Switch 语句中出现编译错误?

c# - 在枚举中使用特殊字符,例如% (C#3.0)

java - JComponent:它如何抵抗小型化?

java - org.springframework.beans.factory.BeanDefinitionStoreException : Unexpected exception parsing XML document from ServletContext resource on spring app

java - 程序运行时向 JComboBox 添加项目

c++ - 在 C++ 中,在销毁指向类的指针后,我可以使用新函数重新利用指针吗

PostgreSQL - 返回任何 ENUM 标签的函数

java - Xalan XSLT - 内存堆空间不足