字符串与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

回到顶部