簡體   English   中英

如何在Java中使用單獨的枚舉類引用靜態類?

[英]How can I reference a static class with a separate enum class in Java?

這是我當前的枚舉類:

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);

謝謝大家
哈科:)

您可以使用反射來完成此操作,但是最好為該類提供一個實例,該實例實現一個接口,所有其他實現都可以實現該接口,即使該接口只有一個實例,例如

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);

是的,您可以按類名后跟.class習慣.class來引用類。 在您的示例中顯示:

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

    private String name;
    private String description;
    private Class<?> clazz;

    BuildingType(String name, String description, Class<?> clazz) {
        this.name = name;
        this.description = description;
        this.clazz = clazz;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public Class<?> getReferencedClass() {
        return clazz;
    }

    public static class Miner {}

    public static class Farm {}

    public static class Bakery {}

    public static class Factory {}

    public static class Quarry {}
}

暫無
暫無

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

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