对一个字符串进行不区分大小写的匹配,以匹配一个Java枚举类型。

24 浏览
0 Comments

对一个字符串进行不区分大小写的匹配,以匹配一个Java枚举类型。

Java为每个Enum对象提供了valueOf()方法,因此对于给定的枚举,可以进行查找操作。如果传递给valueOf()的字符串与现有的Day值不匹配(区分大小写),则会抛出IllegalArgumentException异常。为了进行不区分大小写的匹配,可以在Day枚举内部编写一个自定义方法,例如:

public static Day lookup(String day) {

for (Day d : Day.values()) {

if (d.name().equalsIgnoreCase(day)) {

return d;

}

}

return null;

}

有没有一种通用的方式,不使用值缓存或任何其他额外的对象,只编写一次类似上述lookup()方法的静态方法(即,不为每个枚举编写相同的方法),假设values()方法在编译时会隐式添加到Enum类中?

这样一种"通用"lookup()方法的签名将类似于Enum.valueOf()方法,即:

public static > T lookup(Class enumType, String name);

它将准确实现Day.lookup()方法的功能,适用于任何枚举,而无需为每个枚举重新编写相同的方法。

0