【发布时间】:2015-09-21 16:02:31
【问题描述】:
一直在尝试构建一个我想或多或少保持静态的类,因此我可以按类别选择不同的元素: MyClass.CategoryOne.ELEMENTONE
我为实现这一目标而构建的是
public class ElementClass {
public static List<Element> elementList = new ArrayList<Element>();
public enum Animals {
DOG(new Dog()),
CAT(new Cat());
private Animal element;
private Animals (Animal element) {
this.element= element;
addToList(element);
}
public Animal getElement() {
return element;
}
}
public enum Plants {
TREE(new Tree());
BUSH(new Bush());
private Plant element;
private Plants (Plant element) {
this.element= element;
addToList(element);
}
public Plant getElement() {
return element;
}
}
public enum Buildings {
FENCE(new Fence()),
BRIDGE(new Bridge()),
private Building element;
private Buildings(Building element) {
this.entity = element;
addToList(element);
}
public Building getElement() {
return element;
}
}
private static void addToList(Element element) {
if (!elementList.contains(element)) {
elementList.add(element);
}
}
}
问题在于它没有完全初始化(在代码中的某个位置,Plants 枚举没有添加到列表中,而其余的则添加了)。
我可以使用以下方法“修补”它:
private static ElementClass instance = new ElementClass ();
private ElementClass () {
ElementClass.Animals.values();
ElementClass.Plants.values();
ElementClass.Buildings.values();
}
public static ElementClass getInstance() {return instance;}
并提前调用实例,但我想知道.. 有没有办法做到这一点而无需添加没有其他目标的值调用?我想我的方法不是最好的,但我不知道其他方法可以让我以这种方式访问每个元素(例如 ElementClass.Animals.DOG)。
如果方法还不错,有没有办法在课程开始时遍历所有枚举?或将其添加到 for 循环中的方法(我不知道 getClass().getFields() 是否可以帮助,或者我是否可以将字段强制转换为枚举以获取值)。
【问题讨论】:
-
代码中的某个点向我们展示那个代码。
-
你是如何子类化枚举的?我认为这在 Java 中是不可能的。