我有一些枚举,全部不同,我想创建一个函数,可以查找字符串是否是枚举变量名称之一(不确定它是否真的可以理解)。
enum MYENUM {
ONE,
TWO;
}
enum MYENUM1 {
RED,
GREEN;
}
我想这样做(这只是为了示例,我的枚举更复杂):
if(isInEnum(MYENUM, "one")) ...
if(isInEnum(MYENUM1, "one")) ...
isinEnum
函数(代码很糟糕,只是为了理解):
boolean isinEnum(enum enumeration, String search) {
for(enum en : enumeration.values()){
if(en.name().equalsIgnoreCase(search)) return true;
}
return false;
}
这种事情可能吗?
根据我在网上读到的内容,我认为不是,但也许有人有一种解决方案可以做到这一点,而不是为每个枚举创建一个循环。
最佳答案
这是一种使用反射的方法...
public class EnumFinder {
public static <T extends Enum<T>> boolean isInEnum(Class<T> clazz, String name) {
for (T e : clazz.getEnumConstants()) {
if (e.name().equalsIgnoreCase(name)) {
return true;
}
}
return false;
}
public static void main(String[] argv) {
System.out.println(isInEnum(MYENUM.class, "one")); // true
System.out.println(isInEnum(MYENUM1.class, "one")); // false
}
}
您的回答尝试实际上非常接近。唯一的区别是 Java 需要定义类的实例,以便在运行时动态回答有关未知类型的问题。
关于java - 如何传递不同的枚举作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10778861/