为什么在赋值期间只能在没有“new”的情况下创建数组?

时间:2016-03-01 03:45:53

标签: java arrays initialization specifications

在分配类型T数组期间,表达式的new T[]部分是隐式的。

int[] test = {1,2,3,5};

语言规范是否说明为何在其他地方不支持此类初始化?像bellow这样的语法是否会与任何其他语言规则冲突?似乎类型推断似乎不会太困难。

public static void test(int[] a, int[] b) { ... };
... 
test({1,2,3}, {4,5,6});

1 个答案:

答案 0 :(得分:2)

JLS确实说你不能在第15节中这样做。从15.12 Method Invocation Expressions开始,我们可以看到你可以调用方法的所有有效方法。其中重要的部分是可选的ArgumentList,它将提供有关参数的有效语法的规范。

在调用表达式下方,我们可以看到ArgumentList的定义,它主要是Expression的另一个链接。

当我们遵循时,我们可以看到Expression中定义了两种类型的表达式; LambdaExpressionAssignmentExpression。据我所知,你的问题是"Class instance creation expressions"类型。事实证明,cd converted for %%f in (*.mp4) do ( echo.>%%f.list echo file '%%f' >> %%f.list echo file 'intro_outro/c_outro.mp4' >> %%f.list ) for %%f in (*.list) do ( ffmpeg -f concat -i %%f -c copy concatenated/%%f.mp4 ) 这样的调用是有效的。

当我们按照第15.9节的链接时,我们可以看到您提议的内容根本不受支持。

这没有回答为什么;我意识到这一点。但是,只有做出该决定的人才能回答原因。我们知道其他语言可以证明这种狡猾是可能的。