我有一些枚举,各有不同,我想创建一个函数,如果字符串是枚举变量名之一,可以查找或不查找(不确定它是否真的可以理解)。
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;
}
这种事情有可能吗?
我认为不是,根据我在网上可以阅读的内容,但也许有人有解决办法,而不是为每个枚举制作一个循环。
答案 0 :(得分:1)
这可能不是最干净的解决方案,因为它在正常的程序流程中使用异常,但它肯定很短,因为它避免了循环:
boolean isinEnum(Class<T> enumClass, String search) {
try {
Enum.valueOf(enumClass, search);
return true;
} catch (IllegalArgumentException iae) {
return false;
}
}
答案 1 :(得分:1)
这是一种使用反射的方法......
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需要一个定义类的实例,以便在运行时动态地回答有关未知类型的问题。
答案 2 :(得分:0)
你的问题有点难以理解,但我认为我得到了它的要点。
你可能会使自己的事情变得更加艰难。
看一下Java的地图界面/数据结构(在java.util中),看看是否会让你更接近你的解决方案:
如果没有,重新发布你做过的任何腿部工作,我会看到我是否可以帮助你。 ; - )