为什么我的OUTPUT显示NOOOO?
UserRole.java
public enum UserRole {
ROLE_X("ROLE_X"), //
ROLE_Y("ROLE_Y"), //
ROLE_Z("ROLE_Z"), //
OTHER_X("OTHER_X"),
OTHER_Y("OTHER_Y"),
OTHER_Z("OTHER_Z");
private final String name;
private UserRole(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public boolean hasName(String name) {
return this.name.equals(name);
}
public static UserRole[] ROLES = { ROLE_X, ROLE_Y, ROLE_Z };
public static UserRole[] OTHER = { OTHER_X, OTHER_Y, OTHER_Z };
}
TestCode.java
import java.text.ParseException;
import org.apache.commons.lang.ArrayUtils;
public class TestCode{
public static void main(String[] args) throws ParseException {
String name = "ROLE_X";
if(ArrayUtils.contains(UserRole.ROLES, name)) {
System.out.println("---ROLES---");
} else {
System.out.println("NOOOO");
}
}
}
输出: NOOOO
答案 0 :(得分:9)
因为enum
不是String
。
您有一组enum
个实例,但您正在搜索String
,equals()
永远不会enum
。
使用:
UserRole.valueOf(str)
并捕获IllegalArgumentException
,当字符串与实例不匹配时抛出。{/ p>
您的大多数枚举类都可以删除:
name
字段。每个枚举都有一个.name()
方法,它将枚举实例名称作为字符串.values()
方法,它将所有实例作为数组返回