Java数组枚举(类)

时间:2014-05-04 15:25:23

标签: java arrays enums

做这样的事情有多可行?考虑Enum*一个enum Enum* { /* ... */ } ...

public static void main(String[] args) {
  ?[] types = new ?[] { Enum1, Enum2, Enum3 };

  for(? type : types) {
    for(Enum elem : type.values() { /* ... */ }
  }
}

我的主要要求基本上是一堆字符串常量,每个常量按不同的类型分组。我是否可以使用二维String数组(String[][])进行更好的设置?我想要一些更受约束的值,而不是类型[j],其中j==1A,而j==2B

我知道我可以玩反射,但我敢说它会变得过于复杂,然而又不那么可读。

2 个答案:

答案 0 :(得分:2)

可能这种结构可以解决您的问题:

    enum SomeEnum {
        A("one", "two", "three"),
        B("hello", "there");

        public final String[] constants;

        SomeEnum(String... constants) {
            this.constants = constants;
        }
    }

答案 1 :(得分:1)

如果我正确理解了这个问题,你可以创建一个Enum[][]来存储枚举列表。这看起来像这样。

public class Test {

    enum Birds {BIG_BIRD, MEDIUM_BIRD, SMALL_BIRD};
    enum Dogs {BIG_DOG, MEDIUM_DOG, SMALL_DOG};
    enum Bugs {BIG_BUG, MEDIUM_BUG, SMALL_BUG};
    Enum[][] enums = {Birds.values(),Dogs.values(),Bugs.values()};

}

然后,您可以通过嵌套循环运行enums以获取值。喜欢的东西;

    for(Enum[] e : enums){ 
        for(Enum e2 : e){ 
            System.out.println(e2);
        }
    }

哪会给你输出;

BIG_BIRD
MEDIUM_BIRD
SMALL_BIRD   
BIG_DOG
MEDIUM_DOG
SMALL_DOG
BIG_BUG
MEDIUM_BUG
SMALL_BUG

你可以更进一步,声明代表存储类型的数值的常量。如;

public static final byte BIRDS = 0;
public static final byte DOGS = 1;
public static final byte BUGS = 2;

然后你可以通过go;

访问数组中的特定类型
for(Enum e: enums[Test.BIRDS]) System.out.println((Birds)e);