इसका उद्देश्य शून्य ऑब्जेक्ट है जिसके बजाय null
कीवर्ड है।
सामान्य जावा null
में एक विशेष कीवर्ड है कि इसका मतलब यह है कि संदर्भ किसी भी वस्तु से जुड़ी नहीं है .. यह ठीक काम करता है प्रयोग किया जाता है, लेकिन यह परिस्थितियों जिसमें आप एक अशक्त साथ कुछ करने की कोशिश से हैंडल नहीं करता संदर्भ।
चूंकि शून्य संदर्भ एक ऐसा ऑब्जेक्ट नहीं है जिसे आप कुछ भी नहीं कर सकते हैं और जावा NullPointerException
फेंक देगा। विपरीत हाथ पर यदि आपके पास NullObject
है तो आपका संदर्भ इसके बजाय किसी को भी इंगित नहीं करेगा .. निश्चित रूप से यह NullObject
कुछ भी करने में सक्षम नहीं है, जब आप उस पर कोई विधि लागू करने का प्रयास करेंगे, तो कुछ भी नहीं होगा लेकिन कोई अपवाद नहीं होगा फेंक दिया जाएगा क्योंकि NullObject
का अर्थ है "किसी भी वस्तु की अनुपस्थिति" इसे इन परिस्थितियों से बचने के लिए स्पष्ट रूप से एक वस्तु के रूप में लागू किया गया है।
ताकि ग्रोवी object?.methodName()
जैसी चीजों को संभाल सके। यदि वस्तु रिक्त है ग्रूवी एक NullObject
का उपयोग करेगा ताकि यह अंतर्निहित जाँच की तरह कुछ करना होगा
if (object instanceof NullObject)
return new NullObject();
else
return object.someMethod();
अंत में यह करने की जरूरत है (शायद यह वास्तविक क्रियान्वयन नहीं है, आप विचार देने के लिए बस है) इस तथ्य को दूर करें कि जावा में शून्य संदर्भ का उपयोग करने से हमेशा NullPointerException
का कारण बन जाएगा।
आप कहते हैं "जब आप इस पर एक विधि का आह्वान करने का प्रयास करेंगे तो कुछ नहीं होगा लेकिन कोई अपवाद नहीं फेंक दिया जाएगा"; एक मौलिक तार्किक त्रुटि एक NullPointerException से भी बदतर नहीं है? – Pops
नहीं, यह चुप नहीं है क्योंकि आप केवल इस उद्देश्य के लिए __object? .method() __ वाक्यविन्यास का उपयोग करते हैं। सामान्य सिंटैक्स का उपयोग करना __object.method() __ वैसे भी एक नलपॉन्टर एक्सेप्शन फेंक देगा, नल पैटर्न के साथ भी .. – Jack
एचएम, मुझे जावा और ग्रोवी के बीच अंतरों को और अधिक बारीकी से देखने की ज़रूरत है, मुझे लगता है। इस प्रश्न के लिए भविष्य के आगंतुकों के लिए संदर्भ: ऑपरेटर "?" सुरक्षित नेविगेशन ऑपरेटर नामित किया गया है। http://groovy.codehaus.org/Statements#Statements- Safenavigation – Pops