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

Eth*_*aub 21 java arrays array-initialization

请看以下示例:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*rey 23

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

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


zie*_*mer 23

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

  • 你并没有真正回答具体问题.OP清楚地问为什么他不能使用*简写*初始化,所以我们可以假设他很清楚完全初始化的工作原理. (6认同)
  • 正是我在寻找的东西. (2认同)