gpt4 book ai didi

java - 为什么赋值时只能创建没有 `new`的数组?

转载 作者:行者123 更新时间:2023-11-30 08:40:20 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

当我们遵循它时,我们可以看到 Expression 中定义了两种类型的表达式。 ; LambdaExpressionAssignmentExpression .据我所知,你的问题是 "Class instance creation expressions"类型。事实证明,例如 foo(new Bar[]{new Bar(), new Bar()}); 是有效的。

当我们点击第 15.9 节的链接时,我们可以看到您提出的建议根本不受支持。

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

关于java - 为什么赋值时只能创建没有 `new`的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35714263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com