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

时间:2014-05-26 05:14:55

标签: java arrays enums

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

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}),
...
没有运气。我认为问题在于传递一个数组常量。我不确定它是否是一个需要纠正的简单语法,或者是否存在传递此类数据的潜在问题。提前谢谢。

1 个答案:

答案 0 :(得分:4)

您不能在此使用文字形式,因为只有在变量声明中才允许使用该语法。但你可以使用varargs语法糖,实际上更短。

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})工作正常。