Java为每个valueOf()对象提供了Enum方法,因此public enum Day {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
一个人可以像
Day day = Day.valueOf("Monday");
如果传递给enum的字符串与现有的valueOf()值不匹配(区分大小写),则抛出一个Day值。
要进行不区分大小写的匹配,可以在IllegalArgumentException枚举内编写自定义方法,例如
public static Day lookup(String day) {
for (Day d : Day.values()) {
if (d.name().equalsIgnoreCase(day)) {
return type;
}
}
return null;
}
如果编译时将Day方法隐式地添加到lookup()类中,那么在不使用值缓存或任何其他额外对象的情况下,是否有任何通用方法可以只编写一次类似上述的静态enum方法(即不是针对每个values()方法)?
这种“通用”方法的签名将类似于“通用”方法,即:
public static > T lookup(Class enumType, String name);
它将为任何Enum实现lookup()方法的功能,而无需为每个Enum.valueOf()重新编写相同的方法。
最佳答案:
我发现让仿制药的特殊混合有点棘手,但这是可行的。public static > T searchEnum(Class enumeration,
String search) {
for (T each : enumeration.getEnumConstants()) {
if (each.name().compareToIgnoreCase(search) == 0) {
return each;
}
}
return null;
}
例子
public enum Horse {
THREE_LEG_JOE, GLUE_FACTORY
};
public static void main(String[] args) {
System.out.println(searchEnum(Horse.class, "Three_Leg_Joe"));
System.out.println(searchEnum(Day.class, "ThUrSdAy"));
}