虽然JLS规范中似乎非常精确地描述了
Java语法,但是有一些具体案例我无法应用于给定的定义.
例如,采用JLS8第15.9章中的ClassInstanceCreationExpression规则,非限定新表达式应采用以下形式:
new [TypeArguments] {Annotation} Identifier [TypeArgumentsOrDiamond] ( [ArgumentList] ) [ClassBody]
标识符是标准的Java标识符(基本上是Java字母/数字,没有点).
该定义如何应用于静态嵌套类instanciation等有效表达式:
new C1.C2();
或包合格的类instanciation:
new java.lang.String("foo");
鉴于点不能成为标识符的一部分?
请注意,对于非限定性新表达式,此定义从JLS7更改为JLS8,其中JLS7正在声明:
new [TypeArguments] TypeDeclSpecifier [TypeArgumentsOrDiamond]( [ArgumentList] ) [ClassBody]
TypeDeclSpecifier被定义为:
TypeDeclSpecifier:
TypeName
ClassOrInterfaceType . Identifier
允许静态嵌套类和包限定类的非限定新表达式.