Java generics inheritance warning -
निम्न उदाहरण में foo
विधि हमें एक चेतावनी देती है, जबकि बार
नहीं?
सार्वजनिक वर्ग X {स्थैतिक वर्ग वाई}} स्थिर वर्ग Z y तक विस्तारित करता है Y} = नया Y (); & Lt; T वाई का विस्तार करता है & gt; टी एफू () {रिटर्न (टी) वाई; // चेतावनी - X.Y से T से अनचाहे डाली) Z बार () {रिटर्न (Z) y; // compiles fine}}
टाइप करें टी को संकलन के समय वाई पर मिटा दिया जाता है , यह कैसे जेनेरिक जावा में काम करता है इस प्रकार जब कलाकार को रन टाइम पर किया जाता है तो टी का प्रकार उपलब्ध नहीं है, यह सिर्फ एक वाई
बाइट कोड में है।
बार ()
सभी प्रकार की जानकारी उपलब्ध है (कलाकारों को विफल हो जाएगा) के रूप में ठीक संकलित। लेकिन foo ()
इस प्रकार की जानकारी का अभाव है और असफल नहीं हो सकता, संभावित रूप से (या निश्चित रूप से, इस मामले में) विधि के प्रकार के हस्ताक्षर को गलत तरीके से प्रस्तुत करने और प्रोग्राम में कीड़े का एक स्रोत बनने के लिए।
इसे सुरक्षित रूप से करने के लिए आपको कक्षा में खुद को विधि में उत्तीर्ण करने की आवश्यकता है।
& lt; टी y का विस्तार करता है & gt; टी एफू (कक्षा & lt; T & gt; सीएलएस) {वापसी cls.cast (y); // कोई प्रकार की चेतावनी नहीं डाली विफल होने पर एक त्रुटि फेंक देगी। }
Comments
Post a Comment