将数组常量传递给枚举构造函数[重复]
Posted
技术标签:
【中文标题】将数组常量传递给枚举构造函数[重复]【英文标题】:Passing Array Constant to enum Constructor [duplicate] 【发布时间】:2014-07-14 19:32:41 【问题描述】:Java 枚举允许您将参数传递给构造函数,但我似乎无法传递数组。例如,下面的代码编译没有错误:
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),
...
没有运气。我认为问题在于传递一个数组常量。我不确定这是否是需要更正的简单语法,或者传递此类数据是否存在潜在问题。提前致谢。
【问题讨论】:
RED(new int[]255,0,0)
应该可以正常工作,尽管@Mark Peters 的解决方案是理想的。
【参考方案1】:
你不能在这里使用文字形式,因为这种语法只允许在变量的声明中。但是你可以使用可变参数语法糖,它实际上更短。
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)
工作正常。
【讨论】:
谢谢。我只为一行尝试了新的 int[],这就是它不起作用的原因。当我替换所有三行时,它确实有效。关于 varags 的要点。 可变参数不能用于 arg 列表末尾的多个数组;在这种情况下,数组构造函数new T[]
很有帮助。因此,我们可以说语法 is 允许作为枚举元素的文字参数吗?以上是关于将数组常量传递给枚举构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章