Java
提供一个 valueOf()
enum
Enum<T>
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()
方法一次(即,不是每个 enum
),给出 values()
方法在编译时隐式添加到 Enum<E>
类?
这种“通用”的签名 lookup()
方法类似于 Enum.valueOf()
方法,即:
public static <T extends Enum<T>> T lookup(Class<T> enumType, String name);
并且它将完全实现 --- 任何 enum
Day.lookup()
方法的功能,而不需要为每个 enum
-cc-2b8 重写相同的方法
原文由 PNS 发布,翻译遵循 CC BY-SA 4.0 许可协议
我发现获得泛型的特殊混合有点棘手,但这是可行的。
例子