2010-02-12 11 views
32

सारांश काफी कुछ कहता है।ImmutableList.of() और दोस्तों क्यों नल तत्वों को प्रतिबंधित करते हैं?

if (element == null) { 
    throw new NullPointerException("at index " + index); 
    } 

मैं कई बार आई है और नहीं देख सकते हैं क्यों एक सामान्य प्रयोजन पुस्तकालय समारोह इस सीमा को लागू करना चाहिए: यहाँ ImmutableList.createFromIterable() में कोड के प्रासंगिक टुकड़ा है।

संपादित करें 1: "सामान्य उद्देश्य" से, मैं 95% मामलों से खुश हूं। लेकिन मुझे नहीं लगता कि मैंने अभी तक ImmutableList.of() पर 100 कॉल लिखी हैं, और इसे एक से अधिक बार काट दिया गया है। शायद मैं एक बाहरी हूँ, हालांकि। :)

संपादित करें 2: मुझे लगता है कि मेरी बड़ी शिकायत यह है कि मानक java.util संग्रहों के साथ बातचीत करते समय यह "हिचकी" बनाता है। जैसा कि आपने अपनी बात में बताया है, संग्रह में null एस के साथ समस्याएं उन नलिकाओं को डालने से दूर दिखाई दे सकती हैं। लेकिन अगर मेरे पास कोड की एक लंबी श्रृंखला है जो एक छोर पर मानक संग्रह में नल रखती है और उन्हें दूसरे पर ठीक से संभालती है, तो मैं किसी भी समय Google संग्रह वर्ग को किसी भी बिंदु पर प्रतिस्थापित करने में असमर्थ हूं, क्योंकि यह तुरंत NullPointerException फेंक दें।

+1

प्रश्न: क्या आप "सामान्य उद्देश्यों" का अर्थ "100% उद्देश्यों" या "9 5% उद्देश्यों" का अर्थ है? –

+0

ने उत्तर दिया –

+1

पुन: संपादित करें 2: यह दावा करना है कि रास्ते में उन सभी मध्यवर्ती बिंदुओं के बारे में अज्ञात होना चाहिए कि वे नल के माध्यम से गुज़र रहे हैं या नहीं। मैं इससे सहमत नहीं हूं! इन एपीआई में से प्रत्येक को स्पष्ट रूप से शून्य या स्पष्ट रूप से इसे अस्वीकार करने की अनुमति देनी चाहिए। हर कोई इस बिंदु को दबाकर जारी रख सकता है, लेकिन कृपया यह समझें कि यह शुद्ध शिकायत है, और रचनात्मक नहीं है। भले ही आप हम में से प्रत्येक को आश्वस्त करते हैं, हम गलत, गलत, गलत (बिल्कुल, निश्चित रूप से) थे, फिर भी इससे कोई फर्क नहीं पड़ता: ऐसा नहीं है कि हम इसे और भी बदल सकते हैं। –

उत्तर

34

मैं इस वीडियो के 25 मिनट की इस बिंदु पर विस्तार से बताया: http://www.youtube.com/watch?v=ZeO_J2OcHYM

आलसी उत्तर के लिए क्षमा करें, लेकिन यह सब होने के बाद ही एक "क्यों" सवाल यह है कि (यकीनन Stackoverflow के लिए उपयुक्त नहीं?)।

संपादित करें: यहां एक और बिंदु है, मुझे यकीन नहीं है कि मैंने वीडियो में स्पष्ट किया है: कुल (दुनिया के जावा कोड में), उन नल-अनुकूल मामलों के लिए अतिरिक्त कोड की मात्रा पुराने स्टैंडबिस Collections.unmodifiableList(Arrays.asList(...)) आदि का उपयोग करने के लिए कुल मिलाकर (दुनिया के जावा कोड में) अतिरिक्त checkArgument(!foos.contains(null)) कॉल की राशि से अभिभूत है, अगर हमारे संग्रह ने आपके लिए इसका ख्याल नहीं रखा है तो सभी को यह जोड़ना होगा। अधिकांश, एफएआर द्वारा, संग्रह के उपयोग से किसी भी नल उपस्थित होने की उम्मीद नहीं होती है, और यदि कोई हो तो वास्तव में तेजी से विफल होना चाहिए।

+0

मुझे लगता है कि SO पर Google संग्रह के बारे में प्रश्नों का मेरा ट्रैक रिकॉर्ड इतना गर्म नहीं है। : -/ –

+9

-1। मुझे मत बताओ कि मुझे अपने संग्रह में क्या रखना चाहिए या नहीं। नल अक्सर मेरी सूचियों में मान्य होते हैं। यह दुर्लभ है कि मैं एक सेट या मानचित्र में नल चाहता हूं, लेकिन अगर मैं शून्य तत्वों के खिलाफ सुरक्षा करना चाहता हूं तो मैं कई अन्य टूल का उपयोग कर सकता हूं। – finnw

+24

सबसे पहले, जो आपको एक संग्रह में शून्य नहीं डालने के लिए कह रहा है? यदि आपको आवश्यकता है, क्योंकि हम Googlers के समय के बारे में 5% की आवश्यकता है (हमने इसका ध्यानपूर्वक अध्ययन किया है), बस उस संग्रह का उपयोग करें जो इसका समर्थन करता है। दूसरा, एक विकल्प बनाया गया था, और यह सवाल पूछता है कि विकल्प क्यों बनाया गया था। क्या यह वास्तव में उत्तर को कम करने के लिए समझ में आता है क्योंकि आपको पसंद पसंद नहीं है? यह अभी भी पूछे गए सवाल का जवाब है। –

0

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

+4

नहीं, हम प्रदर्शन प्रदर्शन में से कुछ चीजों की भव्य योजना में बहुत छोटे थे। –

+0

फ़ंक्शन को छोड़कर इसके पैरामीटर को @Nullable के रूप में एनोटेट किया जाता है, इसलिए आपको वास्तव में कोड निरीक्षण को संतुष्ट करने के लिए शून्य की जांच करनी होगी, इस तथ्य के बावजूद कि सूची में नल शामिल नहीं हो सकते हैं। (एलओएल) – Trejkaz

5

सामान्य रूप से Google संग्रह में डेवलपर समूह के हैं जो विश्वास नहीं करते हैं कि नल एक सामान्य सामान्य उद्देश्य पैरामीटर होना चाहिए।

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