java - 处理 java.lang.IllegalArgumentException : No enum constant 的最佳方法是什么

标签 java enums

枚举类是这样的:

public enum UserRoles {
    ADMIN, TEST
}

我想处理它,这样如果枚举中没有值,它就不应该抛出异常。我是这样处理的:

for(String roleString : roleStrings){
    if(roleString.isEmpty())
        continue;
    UserRoles userRole;
    try {
        userRole = UserRoles.valueOf(roleString);
    } catch(IllegalArgumentException e) {
        continue;
    }
    accountRoles.add(userRole);
}

有更好的方法吗?

最佳答案

您可以引入一个静态方法,如果找到,它将为您获取Enum值,否则返回null

enum UserRoles {
    ADMIN, TEST;

    public static UserRoles fetchValue(String constant) {
       return Arrays.stream(UserRoles.values())
                    .filter(e -> e.name().equals(constant))
                    .findFirst()
                    .orElse(null);
    }
}

现在,即使未找到 Enum 常量,也会返回 null 而不是抛出异常。按如下方式使用它:

UserRoles userRole = UserRoles.fetchValue(str);
if (userRole != null) {
    accountRoles.add(userRole);
}

关于java - 处理 java.lang.IllegalArgumentException : No enum constant 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54148910/

相关文章:

java - AAPT : error: <item> inner element must either be a resource reference or empty

需要 Java 代码片段输出说明

java - 需要使用枚举

java - 为什么 switch case 语句无法使用 Enum 的属性?

C++17:还在使用枚举作为常量吗?

java - 更改字符串中的字符时遇到问题

java - 在 Android 中更改 Button 和 TextView 的选择颜色

java - 信任库是纯 Java 术语吗?

java - 使用工厂方法使用 @JsonCreator 反序列化枚举

java - 你把你的字典数据放在哪里?