关于java:将Array常量传递给枚举构造函数

Passing Array Constant to enum Constructor

本问题已经有最佳答案,请猛点这里访问。

Java enum letts you pass the constructor,but I don't seem to pass an array.For instance,the following code compiles with out error:

1
2
3
4
5
6
7
8
9
10
11
12
13
enum Color {
    RED(255,0,0),
    GREEN(0,255,0),
    BLUE(0,0,255);

    int[] rgb;

    Color(int r, int g, int b) {
        rgb[0] = r;
        rgb[1] = g;
        rgb[2] = b;
    }
}

但如果这同一数据通过为一个阵列常数,则代码将不编译:

ZZU1

I have also tried variations of creating a new int[…]array,like:

1
2
3
...
RED(new int[]{255,0,0}),
...

没有运气。我认为问题在于通过一个阵列常数。我不确定这是否是一个简单的句法,需要加以纠正,或是通过这类数据的问题。谢谢你的到来。


这里不能使用文本形式,因为只有在变量的声明中才允许使用该语法。但是你可以使用varargs的句法糖,实际上它比较短。

1
2
3
4
5
6
7
8
9
10
11
enum Color {
    RED(255,0,0),
    GREEN(0,255,0),
    BLUE(0,0,255);

    int[] rgb;

    Color(int... rgb) {
        this.rgb = rgb;
    }
}

与你所说的相反,RED(new int[]{255, 0, 0})工作得很好。