2014-10-11 20 views
5

जबकि जावा व्याकरण जेएलएस विनिर्देशों में बहुत सटीक रूप से वर्णित है, ऐसे कुछ ठोस मामले हैं जिन्हें मैं दी गई परिभाषाओं पर लागू करने में विफल रहता हूं।जावा व्याकरण परिभाषा पूर्णता

उदाहरण के लिए

, अध्याय में 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 अभिव्यक्तियां।

उत्तर

5

यह विनिर्देश में bug प्रतीत होता है।

ऊपर (विवरण में तीसरा बिंदु) से जुड़ा हुआ बग रिपोर्ट से हवाला देते हुए:

  1. व्याकरण निम्नलिखित अभिव्यक्ति के लिए किसी भी उत्पादन को परिभाषित नहीं करता: नई जावा .security.Permissions()

यह 4.3 में TypeDeclSpecifier को हटाने का दुष्प्रभाव है, क्योंकि यह प्रकार एनोटेशन के साथ खराब तरीके से बातचीत करता है। जेएसआर 308 पब्लिक रिव्यू ने नोट किया: "टाइप डीक्लस्पेसिफर जावा भाषा विशिष्टता में अधिक अस्पष्ट nonterminals में से एक है। इसका उपयोग केवल कुछ हद तक स्थितियों में किया जाता है: कक्षा घोषणा के खंडों को बढ़ाता है और लागू करता है (8.1.4, 8.1.5), एक इंटरफ़ेस घोषणा (9.1.3), और क्लास इंस्टेंस सृजन अभिव्यक्ति (15.9) का सिंटैक्स का विस्तार करता है। इसके उपयोग का कारण वाइल्डकार्ड प्रकार के तर्कों को प्रतिबंधित करना है (हालांकि 9.1.3 वास्तव में ऐसा करने में विफल रहता है) , लेकिन यह एक समर्पित गैर टर्मिनल के बिना समान रूप से अच्छी तरह से हासिल किया जा सकता है। "

संबंधित मुद्दे