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

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

这种事情可能吗?

根据我在网上读到的内容,我认为不是,但也许有人有一种解决方案可以做到这一点,而不是为每个枚举创建一个循环。

最佳答案

这是一种使用反射的方法...

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/

相关文章:

java - 将类(class)成员复制到其他类(class) - eclipse

java - 在 JDO 查询中忽略大小写

Java如何添加一个排除特定数字的随机生成器?

java - 从Java中的枚举获取字符串值

java - 使用反射动态调用正确的正确设置方法

c++ - 关于在 C++ 中扩展枚举

java - Spring Boot 单元测试未正确获取 @Component Autowiring 对象的 @Value

java - 为什么synchronized不能同步线程?

random - 如何选择一个随机枚举值

c - 消息队列不会读取枚举类型的消息