2014-05-06 2 views
13

Java Guidelines for Wildcard Use का कहना है:क्या कोई विधि कक्षा या कक्षा <?> वापस करनी चाहिए?

एक वापसी प्रकार के रूप में एक वाइल्डकार्ड का उपयोग करना है, क्योंकि यह वाइल्डकार्ड से निपटने के लिए कोड का उपयोग कर प्रोग्रामर बलों बचा जाना चाहिए।

ObjectgetClass विधि एक Class<?> देता है। Class में विभिन्न विधियां Class<?> स्वीकार करती हैं और यदि आप Class में पास करते हैं तो संकलक एक अनचेक चेतावनी देता है। इससे मुझे लगता है कि हमेशा Class<?> का उपयोग करना बेहतर है।

यदि मेरे पास कोई तरीका है जो Class देता है, और मुझे नहीं पता कि उस ऑब्जेक्ट का उपयोग कैसे किया जाएगा, तो मुझे किस प्रकार Class या Class<?> वापस करना चाहिए? क्यूं कर? क्या कोई परिदृश्य है जिसमें मैं बस Class वापस लौटना चाहूंगा?

+3

@CPerkins, जैसा कि मैंने आपके द्वारा प्रदान किए गए उद्धरण को समझ लिया है, वे उपरोक्त चार बुलेट बिंदुओं के बारे में बात कर रहे हैं। यह मेरे प्रश्न में दिए गए उद्धरण में रिटर्न प्रकारों के लिए "दिशानिर्देश" देने के लिए आगे बढ़ता है। यह केवल getClass नहीं है, लेकिन क्लास विधियों का उपयोग करते समय अनचेक चेतावनियां जो इस पर सवाल उठा रही हैं। –

उत्तर

3

MyType<?> का उपयोग करना कच्चे MyType का उपयोग करना हमेशा बेहतर होता है (और यह Class तक फैला हुआ है)। दिशानिर्देश इसे एक मानते हैं कि नया कोड कच्चे प्रकार का उपयोग नहीं करेगा, जो केवल पिछड़ा संगतता के लिए समर्थित हैं। वे सुझाव नहीं दे रहे हैं कि आप जेनिक्स छोड़ दें जब ? सबसे अच्छा है जो आप कर सकते हैं।

वाइल्डकार्ड पैरामीटर का उपयोग करके, जेनिक्स के संकलन-समय प्रकार की सुरक्षा गारंटी अभी भी पकड़ती है। ये गारंटी केवल अनुपस्थितियों और कच्चे प्रकार के में मौजूद हैं।

3

यदि आप जेनेरिक प्रकार का एक प्रकार वापस करना चाहते हैं तो वाइल्डकार्ड का उपयोग करना निश्चित रूप से कच्चे प्रकार का उपयोग करना बेहतर होता है - यदि आप अपने कोड में कच्चे प्रकार का उपयोग शुरू करते हैं तो प्रभावी रूप से आपके द्वारा प्राप्त अन्य सभी प्रकार की सुरक्षा जांच को बंद कर देता है जेनिक्स का सही ढंग से उपयोग करने से।

दिशानिर्देश कहते हैं वाइल्डकार्ड से बचा जाना चाहिए, नहीं है कि वे नहीं किया जाना चाहिए। आपको सबसे विशिष्ट प्रकार का उपयोग करना चाहिए जो किसी दिए गए परिदृश्य में समझ में आता है, जो कि प्रकार पैरामीटर का एक ठोस तात्कालिकता हो सकता है, एक बाध्य extends या super वाइल्डकार्ड, या एक असंबद्ध वाइल्डकार्ड हो सकता है, लेकिन इनमें से कोई भी कच्चे प्रकार की तुलना में बेहतर विकल्प है ।

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