@ योग्य एनोटेशन उपयोग


347

मैंने जावा में कुछ विधि के रूप में घोषित किया:

void foo(@Nullable Object obj)
{ ... }

@Nullableयहाँ का अर्थ क्या है? क्या इसका मतलब है कि इनपुट हो सकता है null?

एनोटेशन के बिना, इनपुट अभी भी शून्य हो सकता है, इसलिए मुझे लगता है कि यह बस नहीं है?


3
नीचे दिए गए उत्तरों से, मुझे पता चला है कि एनोटेशन इंगित करता है कि शून्य मान स्वीकार्य हैं, जहाँ इसका उपयोग किया जाता है, कोड एनालाइज़र मैं आज़मा सकता हूँ और यह व्याख्या अलग-अलग हो सकती है। देखें कि यह प्रारूप एक अच्छा क्यों है? + 1s सभी दौर में, खासकर यह सवाल पूछने के लिए।
आईकेडवाटर

8
@Nullableआपके प्रश्न के संदर्भ में कौन सी लाइब्रेरी प्रदान कर रही है? क्या यह चेकर है?
8bitjunkie

जवाबों:


367

यह स्पष्ट करता है कि विधि शून्य मानों को स्वीकार करती है, और यदि आप विधि को ओवरराइड करते हैं, तो आपको शून्य मानों को भी स्वीकार करना चाहिए।

यह फाइंडबग्स जैसे कोड एनालाइजर के लिए एक संकेत के रूप में भी कार्य करता है । उदाहरण के लिए, यदि इस तरह की विधि पहले अशक्त के लिए जाँच के बिना अपने तर्क को प्रस्तुत करती है, तो फाइंडबग्स एक चेतावनी का उत्सर्जन करेगा।


82

इस एनोटेशन का इस्तेमाल आमतौर पर खत्म करने के लिए किया जाता है NullPointerExceptions@Nullableकहते हैं कि यह पैरामीटर हो सकता है null। इस तरह के व्यवहार का एक अच्छा उदाहरण Google Guice में पाया जा सकता है । इस हल्के निर्भरता इंजेक्शन ढांचे में आप बता सकते हैं कि यह निर्भरता हो सकती है null। यदि आप nullएक एनोटेशन के बिना पारित करने की कोशिश करेंगे तो फ्रेमवर्क यह काम करने से इनकार कर देगा।

एनोटेशन के @Nullableसाथ क्या अधिक उपयोग किया जा सकता है @NotNull। यहाँ आप उन्हें ठीक से उपयोग करने के लिए कुछ सुझाव पा सकते हैं । IntelliJ में कोड निरीक्षण एनोटेशन की जाँच करता है और कोड को डीबग करने में मदद करता है।



1

दी गई, निश्चित रूप से अलग-अलग सोच हैं, मेरी दुनिया में, मैं "कभी भी एक शून्य पास नहीं कर सकता" लागू नहीं कर सकता क्योंकि मैं एपीआई कॉलर्स, डेटाबेस रिकॉर्ड्स, पूर्व प्रोग्रामर आदि जैसे बेकाबू तीसरे पक्ष के साथ काम कर रहा हूं ... इसलिए मैं दृष्टिकोणों में पागल और रक्षात्मक हूं । चूंकि आप Java8 पर हैं या बाद में एक ifब्लॉक की तुलना में थोड़ा क्लीनर दृष्टिकोण है ।

public String foo(@Nullable String mayBeNothing) {
   return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}

इसमें स्वैप .orElseकरने से आप कुछ अपवाद भी फेंक सकते हैं orElseThrow(() -> new Exception("Dont' send a null"))

यदि आप @Nullable का उपयोग नहीं करना चाहते हैं, जो कार्यात्मक रूप से कुछ भी नहीं जोड़ता है, तो बस पैरामीटर का नाम क्यों न दें, mayBe...ताकि आपका इरादा स्पष्ट हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.