Java
提供valueOf()
每个 Enum<T>
的方法对象,因此给出 enum
喜欢
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);
它将完全实现 Day.lookup()
的功能任何 enum
的方法,无需为每个 enum
重新编写相同的方法.
最佳答案
我发现获得特殊的泛型混合有点棘手,但这是可行的。
public static <T extends Enum<?>> T searchEnum(Class<T> 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"));
}
关于java - 字符串与 Java 枚举的不区分大小写匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332924/