Podczas gdy gramatyka Java wydaje się bardzo dokładnie opisana w specyfikacjach JLS, istnieją pewne konkretne przypadki, których nie stosuję w podanych definicjach.Kompletność definicji gramatyki języka Java
Na przykład, biorąc ClassInstanceCreationExpression
reguły w rozdziale 15.9 z JLS8, niekwalifikowanych new
wyrażeniach powinny mieć postać:
new [TypeArguments] {Annotation} Identifier [TypeArgumentsOrDiamond] ([ArgumentList]) [ClassBody]
Identifier
będącego standardem identyfikator Java (głównie Java litery/cyfry, nie dot).
Jak ta definicja ma zastosowanie do ważnych wyrażeń takich jak statyczne zagnieżdżonych klas instanciation:
new C1.C2();
lub pakiet wykwalifikowanych klas instanciation:
new java.lang.String("foo");
danej że kropki nie może być częścią Identifier
?
Należy zauważyć, że nastąpiła zmiana na tej definicji od JLS7 do JLS8, gdzie JLS7 został stwierdzające, dla niekwalifikowanych new
wyrażeń:
new [TypeArguments] TypeDeclSpecifier [TypeArgumentsOrDiamond]([ArgumentList]) [ClassBody]
TypeDeclSpecifier
jest zdefiniowany jako:
TypeDeclSpecifier:
TypeName
ClassOrInterfaceType . Identifier
pozwalając niekwalifikowane wyrażenia new
dla klas zagnieżdżonych statycznych i klas o kwalifikacjach pakietowych.