असल में, यह कह रहा है कि T
के लिए केवल एक संभव प्रकार है और यह String
है। तो मूल रूप से आपकी जेनेरिक Car
कक्षा केवल नाम में सामान्य है। आप String
के साथ कक्षा में T
के सभी उदाहरणों को भी प्रतिस्थापित कर सकते हैं।
शायद आप public class Car<T extends CharSequence>
मतलब ... क्योंकि वर्ग सार्थक, और संभवतः भी उपयोगी है
निर्माण अनुमति दी है। चेतावनी दी जाती है क्योंकि (कंपाइलर लेखकों की राय में) आपने शायद गलती की है। तर्क चेतावनी है कि कुछ compilers निम्नलिखित के लिए आप दे देंगे के लिए के रूप में ही है:
String NULL = null;
System.err.println(NULL.toString());
यह सार्थक है, लेकिन यह एक गलती है ... जब तक आप इरादा यह एक अपवाद फेंकने के लिए।
मैं दो स्थितियों के बारे में सोच सकते हैं, जहां public class Car<T extends SomeFinalClass>
एक गलती नहीं है:
- मामले में जहां
SomeFinalClass
मूल रूप final
नहीं था।
- वह मामला जहां
Car
के लिए कोड स्वचालित रूप से जेनरेट किया गया है, और यह final
कक्षाओं के लिए विशेष-केस कोड उत्पन्न करने के लिए अजीब होगा।
स्रोत
2012-09-18 10:28:30
चेतावनी संदेश सब कुछ कहता है। आप एक कक्षा के साथ कैसे आ सकते हैं जो 'अंतिम' स्ट्रिंग को बढ़ाता है? तो 'टी' निश्चित रूप से 'स्ट्रिंग' – Raffaele
@ थोर 84no संपादित प्रश्न और [एक्स्टाव] (http://stackoverflow.com/a/12475147/315306) का उत्तर – Raffaele