जबकि जावा व्याकरण जेएलएस विनिर्देशों में बहुत सटीक रूप से वर्णित है, ऐसे कुछ ठोस मामले हैं जिन्हें मैं दी गई परिभाषाओं पर लागू करने में विफल रहता हूं।जावा व्याकरण परिभाषा पूर्णता
उदाहरण के लिए, अध्याय में ClassInstanceCreationExpression
नियम JLS8, गैर योग्य new
भाव 15.9 रूप में होने चाहिए लेने:
new [TypeArguments] {Annotation} Identifier [TypeArgumentsOrDiamond] ([ArgumentList]) [ClassBody]
Identifier
एक मानक जावा पहचानकर्ता (मूल रूप से जावा पत्र/संख्या, जा रहा है कोई डॉट)।
कैसे इस परिभाषा स्थिर नेस्टेड कक्षाएं instanciation तरह वैध भाव पर लागू होता है:
new C1.C2();
या पैकेज योग्य वर्गों instanciation:
new java.lang.String("foo");
यह देखते हुए कि डॉट्स एक Identifier
का हिस्सा नहीं हो सकता है?
नोट JLS8, जहां JLS7 बताते हुए किया गया था, गैर योग्य new
भाव के लिए करने के लिए JLS7 से इस परिभाषा पर एक परिवर्तन किया गया है:
TypeDeclSpecifier:
TypeName
ClassOrInterfaceType . Identifier
की इजाजत दी:
new [TypeArguments] TypeDeclSpecifier [TypeArgumentsOrDiamond]([ArgumentList]) [ClassBody]
TypeDeclSpecifier
के रूप में परिभाषित किया जा रहा स्थिर नेस्टेड कक्षाओं और पैकेज-योग्य कक्षाओं के लिए गैर-योग्य new
अभिव्यक्तियां।