枚举类是这样的:
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"));
}
}