Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
枚举的Java数组(类)_Java_Arrays_Enums - Fatal编程技术网

枚举的Java数组(类)

枚举的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

这样做有多可行?考虑<代码> EnUM*<代码> A<代码>枚举枚举*{/**/}/<代码>…/P>
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)