我有几个编码为enums
的有限列表类型,它们看起来都是这样的,当然,除了枚举之外的实际值有例外:
public enum SomeType {
TYPE_A("A", "Type A Description"),
TYPE_B("B", "Type B Description"),
TYPE_C("C", "Type C Description");
private String key;
private String label;
private static Map<String, SomeType> keyMap = new HashMap<String, SomeType>();
static {
for(SomeType type : SomeType.values()) {
keyMap.put(type.getKey(), type);
}
}
private SomeType(String _key, String _label) {
this.key = _key;
this.label = _label;
}
public String getKey() {
return this.key;
}
public String getLabel() {
return this.label;
}
public static List<SomeType> getValueList() {
return Arrays.asList(SomeType.values());
}
public static SomeType getByKey(String _key) {
SomeType result = keyMap.get(_key);
if(result == null) {
throw new IllegalArgumentException("Invalid key: " + _key);
}
return result;
}
}
IOW,它们应该都具有相同的构造函数/格式(String _key, String _label
)以及方法和支持Map,以便按字符串查找。
Java枚举不支持继承。是否有一个聪明的解决方法,我可以在一个基类中声明所有重复的样板,然后让枚举psudo从那里继承它们?