如何使用Enums解决没有继承问题?

时间:2015-04-01 21:10:37

标签: java inheritance enums

我有几个编码为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从那里继承它们?

0 个答案:

没有答案