为什么不能在Java构造函数中使用字段的简写数组初始化?

采用以下示例:

private int[] list; public Listing() { // Why can't I do this? list = {4, 5, 6, 7, 8}; // I have to do this: int[] contents = {4, 5, 6, 7, 8}; list = contents; } 

为什么我不能使用速记初始化? 我能想到解决这个问题的唯一方法是为该数组创建另一个数组和设置list

在定义行上定义数组时,它假定它知道类型是什么,因此new int[]是多余的。 但是,当您使用赋值时,它不会假定它知道数组的类型,因此您已指定它。

当然其他语言也没有问题,但在Java中,区别在于您是在同一行上定义和初始化字段/变量。

试试list = new int[]{4, 5, 6, 7, 8};

除了使用new Object[]{blah, blah....}这是一个稍微简短的方法来做你想要的。 使用以下方法。

 public static Object [] args(Object... vararg) { Object[] array = new Object[vararg.length]; for (int i = 0; i < vararg.length; i++) { array[i] = vararg[i]; } return array; } 

PS - Java很好,但在这种情况下很糟糕。 如果可能并且合理,请为您的项目尝试ruby或python。 (看看java 8仍然没有用于填充hashmap的简写 ,并且花了很长时间才进行了一些小改动以提高开发人员的工作效率 )