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