写入/返回任何枚举的枚举常量的方法

时间:2017-06-22 15:26:22

标签: java generics enums

当我存储配置枚举时,只要它与特殊的枚举类型MyEnum类型绑定,这很容易:

void storeMyEnumValue(MyEnum value) {
    String valueString = value.name();
    // Store valueString somewhere
}

MyEnum loadMyEnumValue(MyEnum fallbackValue) {
    // Load valueString from somewhere
    try {
        return MyEnum.valueOf(valueString);
    } catch (Exception e) {
        return fallbackValue;
    }
}

但是,如果我想概括一下并为任何类型的枚举设置一组store / load方法会怎样?

void storeAnyEnumValue(??? value) {
    // The same as before
}

??? loadAnyEnumValue(??? defaultValue) {
    // The same as before
}

正如您所看到的,问题主要是如何处理类型枚举常量的对象"总的来说。

2 个答案:

答案 0 :(得分:2)

对于商店方法,您只需使用Enum<?>的实例即可。这里的类型变量没有任何优势。

void storeAnyEnumValue(Enum<?> value) {
    // The same as before
}

对于load方法,您希望返回类型与defaultValue的类型相同,因此您需要一个类型变量:

<E extends Enum<E>> E loadAnyEnumValue(E defaultValue) {
    // The same as before
}

答案 1 :(得分:1)

怎么样?
void storeAnyEnumValue(Enum<?> value) {
    // The same as before
}

<T extends Enum<T>> T loadAnyEnumValue(T defaultValue) {
    // Not exactly the same as before
}