做这样的事情有多可行?考虑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==1
是A
,而j==2
是B
。
我知道我可以玩反射,但我敢说它会变得过于复杂,然而又不那么可读。
答案 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);