儘管Java的語法似乎是在JLS規格非常精確的描述,也有一些我無法應用上給出的定義具體案例。Java的語法定義完整性
例如,以一章中的ClassInstanceCreationExpression
規則JLS8,非合格new
表達式15.9應該是這樣的形式:
new [TypeArguments] {Annotation} Identifier [TypeArgumentsOrDiamond] ([ArgumentList]) [ClassBody]
Identifier
是標準Java標識符(基本上爪哇字母/數字,無點)。
請問這個定義也適用於有效的表達像靜態內部類instanciation:
new C1.C2();
或全限定類instanciation:
new java.lang.String("foo");
因爲點不能是一個Identifier
的一部分嗎?
注意,有這個定義從JLS7到JLS8,其中JLS7被指出,對於非合格new
表情的變化:
new [TypeArguments] TypeDeclSpecifier [TypeArgumentsOrDiamond]([ArgumentList]) [ClassBody]
TypeDeclSpecifier
被定義爲:
TypeDeclSpecifier:
TypeName
ClassOrInterfaceType . Identifier
允許非合格new
表達式靜態嵌套類和包限定類。