枚举类是这样的:

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);
}


有更好的方法吗?

最佳答案

实现此目的的一种方法是,在枚举内部显式创建一个静态HashMap。如果您期望有很多不匹配的值,则可能会很有用,因为例外通常是(相对)昂贵的操作。否则,您的做法很好。

import java.util.HashMap;
public class Test {

    public static enum UserRoles {
        ADMIN, USER;

        private static HashMap<String, UserRoles> roles;
        static {
            roles = new HashMap<>();
            for (UserRoles r : UserRoles.values()) {
                roles.put(r.toString(), r);
            }
        }

        public static UserRoles parse(String s) {
            return roles.get(s);
        }
    }

    public static void main(String... args) {
        System.out.println(UserRoles.parse("ADMIN"));
        System.out.println(UserRoles.parse("FOO"));
    }

}

10-04 12:41