Java Generics: Warning needs a unchecked cast to conform to <InterfaceName> -


मेरे पास एक इंटरफ़ेस है

  इंटरफ़ेस एक्स {एक getValue (); }  

और कार्यान्वयन

  वर्ग y लागू करता है x {public B getValue () {new b ();}}  

B ए के उपवर्ग है। यह संप्रभु ओवरराइडिंग के कारण काम करता है, मुझे लगता है।

लेकिन अगर मैं इंटरफ़ेस को

  interface x {& lt ; टी ए & gt; टी मिलेव्यू (); }  

मुझे क्रियान्वयन में एक चेतावनी मिलती है

चेतावनी को एक अनियंत्रित कलाकार की जरूरत है जो ए.ए.टी.ए.ए.वेट ()

इंटरफेस के 2 संस्करणों के बीच क्या अंतर है? मैं सोच रहा था कि वे समान हैं।

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

इसलिए, यदि आप कोई संदर्भ प्राप्त करते हैं एक x (चलो इसे obj कहते हैं), आप कानूनी रूप से बिना संकलक चेतावनियों के निम्नलिखित कॉल कर सकते हैं:

  x obj = ... ; बी बी = ओबज.गेट वैल्यू ();  

जो आपके उदाहरण में संभवतः गलत है, क्योंकि यदि आप एक और वर्ग C जोड़ते हैं जो A को भी बढ़ाता है, तो आप कानूनी तौर पर भी कर सकते हैं कॉल:

  सी c = obj.getValue ();  

ऐसा इसलिए है क्योंकि T इंटरफ़ेस से संबंधित एक प्रकार चर नहीं है, केवल विधि के लिए।


Comments

Popular posts from this blog

email - PHP mail error ... failed to open stream : permission denied -

c# - ListView onScroll event -

c - Linux mmap() error -