gpt4 book ai didi

java - 字符串与 Java 枚举的不区分大小写匹配

转载 作者:IT老高 更新时间:2023-10-28 20:46:19 39 4
gpt4 key购买 nike

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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com