Java为每个Enum< T>提供一个valueOf()方法。对象,所以给出一个枚举
public enum Day {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
可以做一个查找
Day day = Day.valueOf("Monday");
如果传递给valueOf()的字符串与现有Day值不匹配(区分大小写),则会抛出IllegalArgumentException异常。
要进行不区分大小写的匹配,可以在Day枚举之内编写一个自定义方法,例如
public static Day lookup(String day) {
for (Day d : Day.values()) {
if (d.name().equalsIgnoreCase(day)) {
return type;
}
}
return null;
}
有没有任何通用方式,不使用缓存值或任何其他额外的对象来编写一个像上述一样的静态lookup()方法(即不是每个枚举),因为values()方法被隐式地添加到Enum< E>在编译时上课?
这种“通用”lookup()方法的签名将类似于Enum.valueOf()方法,即:
public static > T lookup(Class enumType, String name);
并且它将完全实现任何枚举的Day.lookup()方法的功能,而不需要为每个枚举重写相同的方法。