जावा ही नहीं करता है के साथ जहाज इन एनोटेशन.
इसके बजाय, वहाँ के बारे में 10 पारस्परिक रूप से असंगत लेता है पर विचार है, जिनमें से अधिकांश काम पूरी तरह से अलग तरह से लागू करते हैं और अलग अलग अर्थ क्या करने के लिए NonNull
इसका मतलब है, जहां आप इसे रख सकते हैं, और यह कैसे काम करता है.
Oof. यह बहुत ही दुर्भाग्यपूर्ण है, के रूप में मूल विचार का उपयोग कर एनोटेशन जोड़ने के लिए यह जानकारी काफी बेहतर वैकल्पिक करने के लिए और इस तरह, यह देखते हुए कि यह होगा पूरी तरह से पीछे संगत नहीं है और निर्वासित मौजूदा कोड की उदासी में obsolecence, के विपरीत Optional
.
इसलिए, आप की तरह एक है, और यह भी शामिल है अपनी परियोजना में एक ही तरह से आप को शामिल किसी भी तीसरे पक्ष निर्भरता - आम तौर पर शामिल करके इसे में अपने मावेन/Gradle/चींटी+आइवी/आदि (अपने निर्माण फाइल की सूची की निर्भरता).
इंटेलीजे के लिए अपने स्वयं पर ले NonNull और Nullable. यह शायद सबसे सुविधाजनक है । अपने विचारों के बारे में क्या इन एनोटेशन मतलब नीचा कर रहे हैं1. परीक्षक फ्रेमवर्क सबसे अच्छा है, ग्रहण है एक दूसरे से दूर सबसे अच्छा है, और बाकी सब कुछ (सहित इंटेलीजे) के शेयरों तीसरी जगह हाजिर. सबसे अच्छा लेने के लिए है में पाया जा सकता है चेकर के ढांचे, या, लगभग रूप में अच्छा है, ग्रहण के इन एनोटेशन. हालांकि, मुझे शक है इंटेलीजे के नल की जाँच प्रणालियों के लिए सक्षम कर रहे हैं की पूरी तरह से समझ अपनी और अधिक उन्नत परिवर्धन के साथ, इस तरह के रूप में @PolyNull
, तो यह अतिरिक्त अर्थपूर्ण शक्ति के लिए किया जाएगा ज्यादातर बर्बाद किया । एक बोनस के रूप में, इंटेलीजे जहाजों के साथ डेटा का एक गुच्छा के बारे में क्या सही तुच्छता एनोटेशन के लिए किया जाएगा पर प्रमुख पुस्तकालयों.
है कि पिछले एक महत्वपूर्ण है: सबसे अधिक इस्तेमाल किया जावा पुस्तकालयों, सहित java.*
ही है, नहीं है इन एनोटेशन, और काम करने के साथ आधे-नल-एनोटेट कोड है सबसे निश्चित रूप से एक अत्यधिक निराशा; व्यायाम कर की लागत है कि काफी लाभ पल्ला झुकना. केवल वास्तविक समाधान है करने के लिए 'ठीक' पुस्तकालयों के साथ आप का उपयोग सही तुच्छता जानकारी है, लेकिन यह काम का एक टन. सौभाग्य से, इंटेलीजे एक बहुत कुछ किया है यह आप के लिए.
मुझे उम्मीद (ग्रहण करता है इस), कि quickfix (CMD+1 एमएसीएस पर, CTRL+1 पर गैर-एमएसीएस, कम से कम, बॉक्स के बाहर अगर मेरी स्मृति के डिफ़ॉल्ट कुंजीपटल शॉर्टकट मुझे कार्य करता है) में शामिल हैं 'स्वचालित रूप से जोड़ ग्रहण की तुच्छता के लिए एनोटेशन classpath' (या आपके मामले में, इंटेलीजे, पाठ्यक्रम के). अगर है कि किसी भी तरह से प्रदर्शित नहीं हो, इस पृष्ठ से इंटेलीजे डॉक्स समझाने के लिए वास्तव में कैसे जोड़ें org.jetbrains.annotations
पुस्तकालय में शामिल है, जो उनकी तुच्छता एनोटेशन, अपनी परियोजना के लिए. वास्तव में, इन दस्तावेज़ से संकेत मिलता है कि, वास्तव में, quickfix मेनू की पेशकश करता है आप का विकल्प स्वचालित रूप से जोड़ने के इस पुस्तकालय के रूप में त्रुटि के लिए समाधान आप अपने @NonNull
नोड में अपने स्रोत कोड.
[1] सबसे लेता है पर तुच्छता एनोटेशन खुद को सीमित द्वारा काफी अनुमति एनोटेशन पर ही क्षेत्रों, तरीकों (जिसका अर्थ है: यह क्या करता है), और मानकों. हालांकि, एक हो सकता है एक निश्चित रूप से-नहीं-शून्य List
के लिए कर सकता है-हो-अशक्त Map
उदाहरणों में, जो नक्शा निश्चित रूप से अशक्त नहीं String
करने के लिए हो सकता है null Integer
: @NonNull List<@Nullable Map<@NonNull String, @Nullable Integer>>
. एनोटेशन प्रणाली के लिए सक्षम है दे आप लिखते हैं कि, लेकिन सिर्फ अगर अपने एनोटेशन सेट कर रहे हैं के लिए पूरी तरह से TYPE_USE. परीक्षक ढांचे और ग्रहण की तुच्छता एनोटेशन काम की तरह है कि सबसे दूसरों को नहीं कर रहे हैं, और इसलिए कम अर्थपूर्ण है । CheckerFramework एक कदम आगे चला जाता है और आप लिखने की धारणा 'या तो तुच्छता ठीक है'. बस की तरह जेनरिक 3 रूपों (List<Integer>
है , और List<? super Integer>
और List< extends Integer>
, एक बार जेनरिक शामिल कर रहे हैं, 2 nullities (या तो कभी नहीं अशक्त, या निश्चित रूप से अशक्त अनुमति दी है) नहीं रह गया है पर्याप्त, आप अधिक की जरूरत है nullities. परीक्षक ढांचे है @PolyNull
होगा मदद से आप लिंक nullities: आप कर सकते हैं उदाहरण के लिए लिखने के लिए इस विधि में checkerframework लेकिन आप नहीं कर सकते संभवतः यह लिखना ठीक से टाइप के साथ इंटेलीजे है, या उस बात के लिए ग्रहण की:
public void duplicateFirstMatch(List<T> elems, Predicate<T> matcher);
जहां विचार है: इस विधि से चलाता है matcher के खिलाफ प्रत्येक तत्व में, सूची में और पर एक मैच है, उस तत्व के लिए जोड़ा गया है सूची के अंत. यह विधि काम कर सकते हैं अगर T
माना जाता है '@NonNull' (यह देखते हुए कि कोई nulls में हैं, अशक्त कर सकते हैं जोड़ा जा कभी नहीं द्वारा इस कोड है, तो गैर-तुच्छता उसके तत्वों के नहीं किया जा सकता द्वारा उल्लंघन किया गया है), लेकिन यह काम करता है बस के रूप में अच्छी तरह से अगर T
है @Nullable
प्रदान की matcher का भी है @Nullable T
बेशक, अब इस कोड को जोड़ सकता है शून्य करने के लिए सूची में है, लेकिन है कि ठीक है.
इस प्रकार T
न तो नल है और न ही NonNull, लेकिन टीएस में उल्लेख किया हस्ताक्षर करने की जरूरत है मैच के लिए उनकी nullities. @PolyNull
इस समस्या का हल.