当前位置: 首页 > 知识库问答 >
问题:

将数组常数传递给枚举构造函数[duplicate]

东门晨
2023-03-14

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}),
...

没有运气。我认为问题在于传递一个数组常量。我不确定这是一个需要修正的简单语法,还是在传递这种类型的数据时存在一个潜在的问题。提前道谢。

共有1个答案

呼延臻
2023-03-14

这里不能使用文字形式,因为那种语法只允许在变量的声明中使用。但是您可以使用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})可以正常工作。

 类似资料:
  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • 我试图将构造函数参数动态传递给Springboot框架中的一个bean。我已经使用context.getBean(class,arg...)在Spring中动态传递构造函数参数,但它没有成功获取值并显示默认值。我的代码有什么问题? 项目结构: 应用程序上下文.xml 应用 活动 输出:

  • 问题内容: 在处理中,我定义了以下类: 现在,我想创建该类的实例,但是我很难将数组传递给构造函数: 但这总是给我一个错误“意外令牌:{”。因此,显然无法“即时”定义数组。 但是,这将起作用: 但是我发现在对象外部声明该数组是很愚蠢的,因为这会在创建多个对象时带来各种麻烦: 现在,该类的两个实例都引用了相同的数组,这当然不是我想要的。 所以我的问题是:如何在不事先声明数组的情况下将数组正确传递给类的

  • 问题内容: 我的工厂如下 这是Foo的定义: 好。我不确定如何使用Guice将此参数传递给Foo构造函数? 有任何想法吗? 问题答案: 所有“ Guice构造函数参数”答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法: //在实现类上注释构造函数和辅助参数 //使用仅接受辅助参数的create()方法创建工厂接口。 // FooFactory接口没有显式的实现类(Guice Magi

  • 我为什么要这样做?因为lambda表达式生成的ClosureType不是默认可构造的。通过这个“技巧”,我可以默认构造这样的closureType。 此外,模板参数的要求是,它必须为空=>

  • 我不确定我是否过度工程化了,但我正在考虑创建一个枚举,其中包含一个枚举列表作为它的值,从中我可以得到它的值。 我无法确定枚举的类型,以便正确地将值数组筛选到正确的枚举。例如,我可以用轻松地获得US枚举。我遇到的困难是从该数组中获得正确的值。我尝试比较名称,