如何重新实现枚举的值

scp*_*ntm 15 java enums

我需要重新实现一些枚举的enum.valueof方法,这样它们就不再抛出异常,而是如果枚举中不存在值,它们只返回null.

我正在尝试基本的

@Override
    public static <T extends Enum<T>> T valueOf(Class<T> enumType,
            String name){
Run Code Online (Sandbox Code Playgroud)

但它没有用,说我需要覆盖或实现超类型.

我想我可以拿出一个超级课,但我不知道如何把它放在一起.有任何想法吗?

JB *_*zet 19

你不能.你必须定义另一种不同的方法.valueOf方法由编译器自动生成.

public static MyEnum permissiveValueOf(String name) {
    for (MyEnum e : values()) {
        if (e.name().equals(name)) {
            return e;
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)


Are*_*rff 9

使用Apache Commons Lang:

MyEnum myEnum = EnumUtils.getEnum(MyEnum.class, "MY_ENUM_VALUE");
Run Code Online (Sandbox Code Playgroud)

引用来自Javadoc的EnumUtils.getEnum:

获取类的枚举,如果未找到则返回null.

此方法与Enum.valueOf(java.lang.Class,java.lang.String)的不同之处在于它不会为无效的枚举名称抛出异常.