【问题标题】: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 的解决方案是理想的。

标签: java arrays enums


【解决方案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 允许作为枚举元素的文字参数吗?
猜你喜欢
  • 2012-10-29
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2015-03-14
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多