允许“new int[] {0}[0] = 1;”编译的 Java 语法是什么?
我使用 Java® 语言规范 Java SE 8 版本作为参考。
示例类:
class MyClass {
void method() {
new int[] {0}[0] = 1;
}
}
代码应该是赋值,因为创建的数组的索引被赋值。new int[] {0}[0] = 1
0
1
赋值由左手边、赋值运算符和表达式组成。在此示例中,左手边应为 。new int[] {0}[0]
LeftHandSide 可以是 ExpressionName、FieldAccess 或 ArrayAccess。在此示例中,LeftHandSide 应该是 ArrayAccess。
问题在于 ArrayAccess。ArrayAccess 被定义为 ExpressionName(本示例不是这种情况)或 PrimaryNoNewArray,然后是括号之间的表达式。
该代码是 ArrayCreationExpression。主表达式可以是 ArrayCreationExpression 或 PrimaryNoNewArray。所以在我看来,ArrayAccess的第二种情况应该是Primary而不是PrimaryNoNewArray。new int[] {0}
我知道JLS没有针对所有内容的显式语法,例如括号中的表达式或括号中的LeftHandSides,但这似乎是一个错误。我检查了最新的规范(Java SE 17),ArrayAccess的语法保持不变。