如何在枚举时重新实现值

2022-09-03 04:46:57

我需要重新实现我的一些枚举的enum.valueof方法,以便它们不再引发异常,而是在枚举中不存在值时返回null。

我正在尝试基本

@Override
    public static <T extends Enum<T>> T valueOf(Class<T> enumType,
            String name){

但它不起作用,说我需要覆盖或实现一个超类型。

我想我可以想出一个超级班级,但我只是不知道如何把它放在一起。有什么想法吗?


答案 1

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

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

答案 2

使用Apache Commons Lang:

MyEnum myEnum = EnumUtils.getEnum(MyEnum.class, "MY_ENUM_VALUE");

引用自 EnumUtils.getEnum 的 Javadoc

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

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