Java 如何解决枚举没有继承的问题?
我有几种编码为枚举的有限列表类型,它们看起来都与此完全相同,当然,不同枚举的实际值除外:Java 如何解决枚举没有继承的问题?,java,inheritance,enums,Java,Inheritance,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
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;
}
}
注意,它们都应该具有相同的构造函数/格式String\u键、String\u标签以及按字符串查找的方法和支持映射
Java枚举不支持继承。有没有一个聪明的解决办法,可以让我在一个基类中声明所有重复的样板文件,然后让枚举psudo从那里继承它们?我猜你是说公共枚举报告类型?泛型呢?不是扩展它们,这是关于将共享模式集中在一个位置,而不是在每个枚举中重复它们……对不起,然后我收回我的评论并结束投票;您可以做的是在枚举类型中声明抽象方法,这些方法在每个枚举值中实现;此外,枚举类型可以实现接口。但我怀疑,这里真正的问题是枚举被误用了,因为key和label看起来可能是枚举名和toString值;而不是使用getByKeyString方法,而是直接使用枚举值,例如,它们可以很容易地从JPA/Hibernate实体中存储/恢复。