java - Java 中有泛型枚举吗?

标签 java generics enums

我正在尝试编写一个 for 循环来遍历枚举。那部分很简单,格式是:

  for( SomeDeclaredEnumType e : SomeDeclaredType.values() ){
      /*  do stuff here  */
  }

但是,欺骗我的部分是遍历通用枚举。如果我有两个枚举,一个有 5 个元素,一个有 7 个元素,我如何告诉 Java 遍历它们? 本质上,我想执行以下操作:

  Enum e;       // generic type enum
  FiveEnum f;   // enum with 5 elements
  SevenEnum s;  // enum with 7 elements

  switch (condition) {
      case 0:
          e = FiveEnum;   /*  assign e to FiveEnum  */
          break;
      case 1:
          e = SevenEnum;  /*  assign e to SevenEnum  */
          break;
  }

  For (Enum e : Enum.values()) {
      /*  iterate 5 or 7 times, depending on the case conditional  */
  }

有没有办法做到这一点?一个安全的方法来做到这一点?最好使用 Java 库中的泛型,因为不允许我创建新的枚举。谢谢!

最佳答案

Enum确实是一个通用类型;具体来说,它的类型是 Enum<E extends Enum<E>> .这有点令人困惑,但这意味着每个枚举都将自身作为类型参数包含在内。

您的代码可以这样写(假设 FiveEnumSevenEnum 在其他地方声明):

Class<? extends Enum<?>> enumClass = null;
switch (condition) {
case 0:
    enumClass = FiveEnum.class;
    break;
case 1:
    enumClass = SevenEnum.class;
    break;
}
for (Enum<?> e : enumClass.getEnumConstants()) {
    // loop body
}

关于java - Java 中有泛型枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28119929/

相关文章:

ios - 无法将具有通用类型的类添加到 swift Realm

java - 为什么 EnumMap 构造函数需要类参数?

java - 为什么 Maven 的名声这么差?

java - 如何从 Hibernate/JPA 流式传输结果并在处理后释放资源?

java - libgdx 为什么相机不跟随角色?

c# - IEnumerable <T>的实现适用于foreach,但不适用于LINQ

java - 泛型接口(interface)方法参数的实际类型

python - 如何为枚举对象实现增量函数?

c - 带枚举的 Malloc/Free 会出现段错误 - 简单代码

java - JUnit 测试 : Improvement to test case, 测试数组列表的长度?