如何传递不同的枚举作为参数?

时间:2012-05-28 02:50:30

标签: java enums

我有一些枚举,各有不同,我想创建一个函数,如果字符串是枚举变量名之一,可以查找或不查找(不确定它是否真的可以理解)。

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;
}

这种事情有可能吗?

我认为不是,根据我在网上可以阅读的内容,但也许有人有解决办法,而不是为每个枚举制作一个循环。

3 个答案:

答案 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中),看看是否会让你更接近你的解决方案:

java.util Interface Map<K,V>

如果没有,重新发布你做过的任何腿部工作,我会看到我是否可以帮助你。 ; - )