在Java中,什么时候{a,b,c,...}数组的速记不合适,为什么?

2022-09-02 09:24:47

如果要定义变量,则声明/定义变量似乎是完全有效的,如下所示:

    double[][] output = {{0,0},{1,0}};

但是,如果您返回一个值,则编写以下内容似乎无效:

    public double[] foo(){
      return {0,1,2}
    }

我本来以为在内部,这两个人都会执行相同的操作。至少,Eclipse不同意。有谁知道区别是什么,在哪里可以看到,或者为什么接受前一个例子而拒绝后者是有益的?

编辑:好的,所以当你初始化时它是合适的,但我没有看到任何歧义......JVM不能从变量名称(在重新定义已初始化的变量的情况下)或返回时(JVM可以只查看函数的返回类型)来解释变量的类型吗?是什么使初始化成为禁止隐式类型的规则的特殊情况?是什么使一般规则需要显式类型?


答案 1

只能在声明点使用大括号表示法,编译器可以从声明类型推断数组的类型。

要在其他任何地方使用它,您需要使用数组创建表达式

return new double[] {0,1,2};

答案 2

只有在声明期间才可接受。但是,您可以使用 。new double[] {0, 1, 2}

JLS §10.6

数组初始值设定项可以在声明中指定,也可以作为数组创建表达式的一部分指定。

数组创建表达式是语法。new double[] { }