动态生成枚举
问题内容:
假设我有一个格式为基本XML的文件,如下所示:
<?xml version="1.0"?>
<enum-set>
<enum>
<name>SomeEnum</name>
<values>
<value>
<name>SOMEVALUE</name>
<displayText>This is some value</displayText>
</value>
... more values ...
</values>
</enum>
... more enums ...
</enum-set>
我想SomeEnum
在运行时变成这样的东西:
public enum SomeEnum implements HasDisplayText {
SOMEVALUE("This is some value"),
... more values ...;
private String displayText;
SomeEnum(String displayText) {
this.displayText = displayText;
}
@Override
public String getDisplayText() {
return displayText;
}
}
…,然后将新创建的枚举传递给SomeEnum
我的应用程序。我将如何实现这样的目标?可以吗
问题答案:
您尝试做的事情没有任何意义。枚举实际上仅是为了编译时的利益,因为它们表示一组固定的常量。在运行时,动态生成的枚举的含义是什么-
与普通对象有什么不同?例如:
public class Salutation implements HasDisplayText {
private String displayText;
private Salutation(String displayText) {
this.displayText = displayText;
}
@Override
public String getDisplayText() {
return displayText;
}
public static Collection<Salutation> loadSalutations(String xml) {
//parse, instantiate, and return Salutations
}
}
您的XML可以解析为新实例化的Salutation
对象,这些对象可以存储在某些Collection
程序中,也可以由您的程序使用。请注意,在我的示例中,我Salutation
通过为其提供private
构造函数来限制了创建-
在这种情况下,检索实例的唯一方法是调用采用XML的factory方法。我相信这可以达到您想要的行为。