चलिए निम्न श्रेणी पदानुक्रम रखते हैं:जावा जेनेरिक बग?
public class MyType {
}
public class MySuperclass<T extends MyType> {
protected Map<String, String> myMap = new TreeMap<String, String>();
protected String myMethod(String s) {
return myMap.get(s);
}
}
public class MySubclass extends MySuperclass {
@Override
protected String myMethod(String s) {
return myMap.get(s); // <-- compilation error
}
}
MySubclass
की अतिप्रवाह विधि में संकलन त्रुटि क्यों है? त्रुटि संदेश "मिस्चैच टाइप करें: ऑब्जेक्ट से स्ट्रिंग में कनवर्ट नहीं किया जा सकता"।
दिलचस्प बात यह है कि संकलन त्रुटि गायब हो जाती है अगर मैं MySuperclass
परिभाषा में MySuperclass
के लिए जेनेरिक वर्ग प्रकार को परिभाषित करता हूं:
public class MySubclass extends MySuperclass<MyType> {
@Override
protected String myMethod(String s) {
return myMap.get(s);
}
}
क्या कोई इस व्यवहार को समझा सकता है? मैं इसे जावा कंपाइलर बग मानता हूं।
मैं jdk1.6.0_24 का उपयोग कर रहा हूं।
बिल्कुल। वह ब्लोच के "गूढ़ व्यक्ति" में से एक था। – Bozho
तो जेनेरिक सब कुछ या कुछ भी नहीं है? यदि आप कच्चे प्रकार का उपयोग करते हैं, तो आपको उस प्रकार के लिए कोई जेनरिक नहीं मिलेगा, न कि उन हिस्सों को भी जो टी 'टी' पर निर्भर नहीं हैं? – Thilo
लेकिन 'MySuperclass ** ** की सामान्य परिभाषा क्या है, 'मैप ** <स्ट्रिंग, स्ट्रिंग> ** myMap' के जेनेरिक के साथ आम है? वे दो अलग जेनरिक परिभाषाएं हैं जिनमें उनके बीच 'कनेक्शन' नहीं है। मुझे यह नहीं मिला। –