枚举的Java数组(类)
这样做有多可行?考虑<代码> EnUM*<代码> A<代码>枚举枚举*{/**/}/<代码>…/P>枚举的Java数组(类),java,arrays,enums,Java,Arrays,Enums,这样做有多可行?考虑 EnUM* A枚举枚举*{/**/}/…/P> public static void main(String[] args) { ?[] types = new ?[] { Enum1, Enum2, Enum3 }; for(? type : types) { for(Enum elem : type.values() { /* ... */ } } } 我的主要需求基本上是一组字符串常量,每一个都以不同的类型分组。使用二维字符串数组(String
public static void main(String[] args) {
?[] types = new ?[] { Enum1, Enum2, Enum3 };
for(? type : types) {
for(Enum elem : type.values() { /* ... */ }
}
}
我的主要需求基本上是一组字符串常量,每一个都以不同的类型分组。使用二维字符串数组(String[][]
)设置是否更好?我想要更多的约束值,而不是[j]类型,其中j==1
是A
,而j==2
是B
我知道我可以玩弄反射,但我敢说它会变得太复杂,然后可读性就会降低。也许这种结构可以解决您的问题:
enum SomeEnum {
A("one", "two", "three"),
B("hello", "there");
public final String[] constants;
SomeEnum(String... constants) {
this.constants = constants;
}
}
可能这种结构可以解决您的问题:
enum SomeEnum {
A("one", "two", "three"),
B("hello", "there");
public final String[] constants;
SomeEnum(String... constants) {
this.constants = constants;
}
}
如果我正确理解了这个问题,您可以创建一个
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);
如果我正确理解了这个问题,您可以创建一个
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);
你就不能用
映射类型到常量来保存字符串常量吗?@AlexeyShestakov是的,我可以。这比一个字符串[][][]
要好,但我正在寻找更静态的类型,看看是否可能。@Alxe-那么,为了弄清楚这一点,你想要一个枚举类型数组吗?@Rudi是的,枚举类型,而不是枚举对象。@Alxe-好的,我将在答案中提出一个建议。从技术上讲,它将保存枚举,而不是类型,但效果将是相同的。你不能只使用Map typeToConstants
来保存字符串常量吗?@AlexeyShestakov是的,我可以。这比一个字符串[][][]
要好,但我正在寻找更静态的类型,看看是否可能。@Alxe-那么,为了弄清楚这一点,你想要一个枚举类型数组吗?@Rudi是的,枚举类型,而不是枚举对象。@Alxe-好的,我将在答案中提出一个建议。从技术上讲,它将包含枚举,而不是类型,但效果将是相同的。简单而奇特,看起来很棒,因为我只需要迭代它的值。谢谢一个小建议是,在完整性方面,常量
应该用一个方法封装,比如说常量()
,该方法返回数组。copyOf(constants,constants.length)
。简单而奇特,看起来很棒,因为我只需要迭代它的值。谢谢一个小建议是,在完整性方面,常量
应该用一个方法封装,比如常量()
,该方法返回数组.copyOf(常量,常量.length)
。