[英]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.