【发布时间】:2013-02-13 12:04:35
【问题描述】:
Java 语言规范 v7 中的 java grammar 为构造函数指定了以下语法规则:
Primary:
...
new Creator
...
Creator:
NonWildcardTypeArguments CreatedName ClassCreatorRest
CreatedName ( ClassCreatorRest | ArrayCreatorRest )
CreatedName:
Identifier [TypeArgumentsOrDiamond] { . Identifier [TypeArgumentsOrDiamond] }
ClassCreatorRest:
Arguments [ClassBody]
这里让我感到困惑的是CreatedName 规则。根据这个标记,诸如
new Class1<Integer>.Class2<Integer>();
将是有效的构造函数。他们当然不是。
事实上,我找不到任何情况是标识符链(例如Class1.Class2)会有多个类型参数列表(例如<Integer>)。这种情况是否存在,还是语法没有意义?
作为参考,JLS 的section 15.9 中给出的等效语法规则存在相同的问题(这些规则引用了TypeDecl 非终结符,它在section 4.3 中定义)。
【问题讨论】:
标签: java grammar specifications jls