2013-11-25 5 views
8

मैं पिछले JDK 8 (b116) स्थापित किया है लेकिन मैंने देखा है कि मैं प्रकार व्याख्या का उपयोग नहीं कर सकते। उदाहरण पढ़ने जावा ट्यूटोरियल के लिए अगर मैं लिखना:जावा 8, प्रकार टिप्पणियां और JSR 308

String str = null; 
String myString = (@NonNull String) str; 

या

TEST st = new @Interned TEST(); 

संकलक मुझे निम्न त्रुटि दे:

annotation type not applicable to this kind of declaration 

अब यह काम करता है। एक प्रकार टिप्पणियों का उपयोग करने से पहले हम @Target(ElementType.TYPE_USE) साथ एनोटेशन व्याख्या करना होगा। नीचे दी गई टिप्पणियों को देखो!

मैं भी समझ में नहीं आता है, तो जैसे एनोटेशन: NonNull, Interned, आदि JDK में डाला जाएगा या आप अपने प्रश्न के पहले भाग का जवाब दे दिया हम Checker Framework

+2

चेक कि उन एनोटेशन उन स्थितियों पर लागू किया जा सकता है। '@ लक्ष्य' एनोटेशन जांचें। –

+1

क्या आप वाकई * जावा 8 कंपाइलर का उपयोग कर रहे हैं, और आपके पास जावा 8 पर स्रोत स्तर सेट है? क्योंकि आप जो कह रहे हैं वह ओरेकल जावा ट्यूटोरियल जावा 8 के बारे में क्या कहता है, इसके सीधे विरोधाभास में है; http://docs.oracle.com/javase/tutorial/java/annotations/basics देखें।एचटीएमएल –

+1

@ सॉटिरियोस डेलिमैनोलिस, ठीक है यह मेरे एनोटेशन इंटरफेस के साथ काम करता है। हो सकता है कि मैं NonNull, Interned, आदि के साथ गड़बड़ कर रहा हूं ... जो जेडीके के साथ मौजूद नहीं हैं ... ऐसा लगता है कि टाइप करें एनोटेशन का उपयोग @Target (ElementType.TYPE_USE) का उपयोग करने के लिए पर्याप्त है! – xdevel2000

उत्तर

5

डाउनलोड करने के लिए है, तो स्वयं।

दूसरे भाग के लिए:

I also don't understand if the annotations like: NonNull , Interned , etc. will be inserted in the JDK or if we have to download the Checker Framework.

एनोटेशन जावा वर्ग/इंटरफेस का एक प्रकार है। उन्हें स्रोत कोड में परिभाषित किया जाना चाहिए और संकलित किया जाना चाहिए।

आदर्श रूप से आपको निश्चित स्रोत कोड और/या कैनोनिकल स्थान से प्राप्त बाइटकोड फ़ाइलों को चाहिए। हालांकि, अगर आप एनोटेशन के स्रोत कोड (पैकेज नाम, एनोटेशन नाम, फ़ील्ड नाम और प्रकार) की मुख्य भागों पुन: पेश करने और इसे संकलित करने के लिए थे, JVM के बाकी कोई भी समझदार हो जाएगा।

लेकिन जब आप @NonNull और @Interned जैसे विशिष्ट एनोटेशन के बारे में बात करते हैं, तो आपको यह समझने की आवश्यकता है कि विभिन्न पैकेजों में इनमें से कई संस्करण मौजूद हो सकते हैं। यह मानक/defacto मानक संस्करण उभरने तक मुद्दों (एनोटेशन प्रोसेसिंग सॉफ्टवेयर के लिए) का कारण बन सकता है। मुझे नहीं पता कि चेकर्स फ्रेमवर्क को डिफैक्टो मानक कहा जा सकता है ... अभी तक।

आप अगर चेकर्स एनोटेशन जावा 8 पुस्तकालय में जोड़ा जाएगा पूछा। मुझे व्यक्तिगत रूप से संदेह है, क्योंकि उन टिप्पणियों के लिए पैकेज नाम अस्वीकार्य होगा। लेकिन रुकिए और देखो ...

4

दूसरे भाग के लिए:

I also don't understand if the annotations like: NonNull, Interned, etc. will be inserted in the JDK or if we have to download the Checker Framework.

ओरेकल से वितरित JDK @NonNull और @Interned जैसे एनोटेशन शामिल नहीं है - उनमें से कोई भी परिभाषा, और न ही उन पर की घटनाओं जेडीके विधियों।

हालांकि, परीक्षक फ्रेमवर्क एनोटेट शामिल JDK के संस्करण के रूप में Checker Framework manual में विस्तार से बताया। चेकर फ्रेमवर्क आपको रन टाइम पर लाइब्रेरी के निश्चित संस्करण और संकलन समय पर भी उपयोग करने देता है, जबकि प्लग करने योग्य टाइप-चेकिंग एनोटेशन देखता है और इस प्रकार टाइप-चेकिंग परिणाम अधिक सटीक होते हैं।

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