2013-08-09 3 views
8

प्रभावी जावा अध्याय 5 से (जेनरिक):प्रकार पैरामीटर बनाम असीम वाइल्डकार्ड

// Two possible declarations for the swap method 
public static <E> void swap(List<E> list, int i, int j); 
public static void swap(List<?> list, int i, int j); 

इन दोनों घोषणाओं में से कौन सा, बेहतर है और क्यों? एक सार्वजनिक एपीआई में, दूसरा बेहतर है क्योंकि यह आसान है। आप एक सूची में पास होते हैं - कोई भी सूची - और विधि अनुक्रमित तत्वों को स्वैप करती है। चिंता करने के लिए कोई प्रकार पैरामीटर नहीं है। एक नियम के रूप में, यदि एक विधि पैरामीटर विधि घोषणा में केवल एक बार प्रकट होता है, तो उसे वाइल्डकार्ड से प्रतिस्थापित करें।

मुझे समझ में नहीं आता, मेरे एपीआई के क्लाइंट के लिए दूसरा विकल्प क्यों आसान है? मैं समान पैरामीटर को पहले और दूसरे तरीकों से पास कर सकता हूं। इसके अलावा दूसरे को वाइल्डकार्ड कैप्चर के लिए सहायक विधि की आवश्यकता होती है। क्या कोई बता सकता है कि दूसरे की सिफारिश क्यों की जाती है? धन्यवाद!

+0

संभावित उत्तर: http://stackoverflow.com/questions/6231973/difference-between-list-list-listt-liste-and-listobject?rq=1 –

उत्तर

10

जावा जेनरिक एफएक्यू इस तरह के सवालों के जवाब देने के लिए एक महान स्रोत है और "वाइल्डकार्ड बनाम जेनेरिक" पर Which one is better: a generic method with type parameters or a non-generic method with wildcards? और बाद के केस स्टडीज में लंबाई पर चर्चा की जाती है।

एंजेलिका लैंगर निष्कर्ष पर आता है:

निष्कर्ष: इन सभी उदाहरणों में यह ज्यादातर तुम सामान्य या वाइल्डकार्ड संस्करण पसंद करते हैं अभिरूचि और विशिष्टता की बात है। आमतौर पर कार्यान्वयन की आसानी के बीच व्यापार-बंद होता है (जेनेरिक संस्करण अक्सर कार्यान्वित करना आसान होता है) और हस्ताक्षर की जटिलता (वाइल्डकार्ड संस्करण में कम प्रकार के पैरामीटर होते हैं या कोई भी नहीं)।

सरल विधि हस्ताक्षर -> समझने में अधिक आसान है (भले ही दोनों एक ही तरह से उपयोग किया जाता है) -> सार्वजनिक एपीआई में अच्छा (दुविधा: और अधिक जटिल कार्यान्वयन)

लेकिन पूरी बात एक हल्के मुद्दा है और मेरे अनुभव में पूरे एपीआई पर स्थिरता आप जिस शैली का उपयोग करते हैं उससे कहीं अधिक महत्वपूर्ण है।

+2

कृपया इसे एक लिंक के रूप में चिह्नित करने के बजाय अपना उत्तर सुधारें जवाब। उद्धरण फ़ॉर्म में अपने उत्तर में लिंक की प्रासंगिक सामग्री को कम से कम कॉपी करें (पैराग्राफ की शुरुआत में '>' प्रतीक का उपयोग करें)। –

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