在Java中将其作为参数传递时创建数组

有没有办法创建一个对象数组作为构造函数或方法的一部分? 我真的不确定怎么说这个,所以我举了一个例子。 我有一个枚举,其中一个字段是一组数字。 这是我尝试过的:

public enum KeyboardStuff { QWERTY(1, {0.5f, 1.3f, 23.1f}, 6); DVORAK(5, {0.1f, 0.2f, 4.3f, 1.1f}, 91); CHEROKEE(2, {22.0f}, 11); private int number, thingy; private float[] theArray; private KeyboardStuff(int i, float[] anArray, int j) { // do things } } 

编译器说括号{}无效,应该删除。 有没有一种方法可以将数组作为参数传递而不事先创建对象数组?

您可以尝试使用new float[] { ... }

 public enum KeyboardStuff { QWERTY(1, new float[] {0.5f, 1.3f, 23.1f}, 6); DVORAK(5, new float[] {0.1f, 0.2f, 4.3f, 1.1f}, 91); CHEROKEE(2, new float[] {22.0f}, 11); private int number, thingy; private float[] theArray; private KeyboardStuff(int i, float[] anArray, int j) { // do things } } 

关注@ Dave的建议我会使用vararg

 QWERTY(1, 6, 0.5, 1.3, 23.1); DVORAK(5, 91, 0.1, 0.2, 4.3, 1.1); CHEROKEE(2, 11, 22.0); private final int number, thingy; private final double[] theArray; private KeyboardStuff(int number, int thingy, double... theArray) { // do things } 

使用float比使用double更好。 double具有较少的舍入误差,仅使用4个字节。

有没有办法可以在不创建数组的情况下传递数组?

不,但你可以使用varargs使其大部分不可见,尽管最后的int可能需要移动。

如果使用Lists而不是数组是一个选项,Java的未来版本可能会开始支持’ 集合文字 ‘语法,遗憾的是它似乎没有进入Java 8:

 public enum KeyboardStuff { QWERTY(1, [0.5f, 1.3f, 23.1f], 6); DVORAK(5, [0.1f, 0.2f, 4.3f, 1.1f], 91); CHEROKEE(2, [22.0f], 11); private int number, thingy; private List values; private KeyboardStuff(int i, List values, int j) { // do things } }