将数组常量传递给枚举构造函数[重复]

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 允许作为枚举元素的文字参数吗?

以上是关于将数组常量传递给枚举构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将参数从php中的数组传递给构造函数[重复]

为啥我必须将道具传递给构造函数和超级[重复]

将数组传递给构造函数会产生大小为 1 的数组? [复制]

如何将数组传递给构造函数或类?

使用构造函数将数组传递给对象后,值已更改(在 c++ 中)。我想不通为啥

无法从构造函数中将数组值传递给向量