字符串与Java枚举的大小写不敏感匹配
Java``valueOf()
为每个Enum<T>
对象提供一种方法,因此给一个enum
类似
public enum Day { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
一个人可以像
Day day = Day.valueOf("Monday");
如果传递给的字符串valueOf()
与现有Day
值不匹配(区分大小写),IllegalArgumentException
则将引发an 。
要进行不区分大小写的匹配,可以在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枚举的大小写不敏感匹配 的全部内容, 来源链接: utcz.com/qa/424423.html