这是不允许的,因为JLS这么说。仅在声明和数组创建表达式中才允许使用该语法。
后者提供了获得相同结果的另一种方法:
int[] a;a = new int[]{1, 2, 3, 4};至于需要的实际根本原因new T[],我的猜测如下。考虑以下数组初始化器:
{1, 2, 3, 4}它可以用于初始化不同类型的数组:
new int[]{1, 2, 3, 4};new float[]{1, 2, 3, 4};new double[]{1, 2, 3, 4};如果new T[]不需要该位,我怀疑裸露的内容
{1, 2, 3, 4}可能会在语义分析期间造成困难。在这里,我正在考虑以下情况:void f(float[] x) { ... }void f(double[] x) { ... }void g() { f({1, 2, 3, 4});}如果允许使用此语法,则语言规范将必须处理选择要调用的函数的复杂性。
同样,不清楚的类型应该是什么
{null}。它可以是Object[],
Integer[],
Serializable[]等。
最后,空数组
{}将是最棘手的。在这里,我们甚至无法分辨它是对象数组还是标量数组。语言设计人员似乎并没有解决所有这些复杂问题,而是选择通过要求
new T[]语法来避免它们。



