2014-05-04 57 views
0

做这样的事情有多可行?考虑Enum*一个enum Enum* { /* ... */ } ...Java Array of Enum(classes)

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

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

我的主要要求是基本一串字符串常量,每一个在不同类型的分组。我会更好地设置一个二维字符串数组(String[][])吗?我想要一些更多的约束值,而不是类型[j],其中j==1A,而j==2B

我知道我可以玩反射,但我敢说它会变得太复杂,然后,可读性较差。

+0

难道你不能只使用Map > typeToConstants'来保存你的字符串常量吗? –

+0

@AlexeyShestakov是的,我可以。这比'String [] []'更好,但我正在寻找更静态类型的东西,看看是否有可能。 – Alxe

+0

@Alxe - 所以,只为了弄清楚这一点,你希望有一个枚举类型的数组? –

回答

2

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

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

     public final String[] constants; 

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

简单又漂亮,看起来不错,因为我只需要遍历它的值。谢谢! – Alxe

+0

一个小建议是,应该用方法封装“constantants”,比如说说'constants()',它返回'Arrays.copyOf(constants,constants.length)'。 – Alxe

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; 

然后你可以通过去访问数组中的特定类型;

for(Enum e: enums[Test.BIRDS]) System.out.println((Birds)e);