Java 将数组常量传递给枚举构造函数

Java 将数组常量传递给枚举构造函数,java,arrays,enums,Java,Arrays,Enums,JavaEnum允许您将参数传递给构造函数,但我似乎无法传递数组。例如,以下代码编译时没有出错: 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; } } 但是,如果将相同的数据作

JavaEnum允许您将参数传递给构造函数,但我似乎无法传递数组。例如,以下代码编译时没有出错:

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;
    }
}
但是,如果将相同的数据作为数组常量传入,则代码将不会编译:

enum Color {
    RED({255,0,0}),
    GREEN({0,255,0}),
    BLUE({0,0,255});

    int[] rgb;

    Color(int[] rgb) {
        this.rgb = rgb;
    }
}
我还尝试了创建新int[]数组的各种方法,如:

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

没有运气。我认为问题在于传递数组常量。我不确定这是否是一个需要更正的简单语法,或者传递这种类型的数据是否存在潜在问题。提前感谢。

这里不能使用文本形式,因为这种语法只允许在变量声明中使用。但是您可以使用varargs语法sugar,它实际上更短

enum Color {
    RED(255,0,0),
    GREEN(0,255,0),
    BLUE(0,0,255);

    int[] rgb;

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

与您所说的相反,
RED(newint[]{255,0,0})
工作正常。

谢谢。我只为一行尝试了新的int[],这就是它不起作用的原因。当我把这三条线全部换掉时,它确实起了作用。varags的优点是:Varargs不能用于arg列表末尾的多个数组;在这种情况下,数组构造函数
newt[]
很有帮助。因此,我们可以说语法被允许作为enum元素的文本参数吗?
RED(newint[]{255,0,0})
应该可以很好地工作,尽管@Mark Peters的解决方案是理想的。