मैं एक लाइब्रेरी में परिभाषित कक्षा को विस्तारित कर रहा हूं जिसे मैं नहीं बदल सकता:कच्चे प्रकार के पैरामीटर के साथ एक विधि को ओवरराइड करते समय अनचेक चेतावनी से बचा जा सकता है?
public class Parent
{
public void init(Map properties) { ... }
}
अगर मैं कक्षा 'चाइल्ड' को परिभाषित कर रहा हूं जो माता-पिता को बढ़ाता है और मैं जेनिक्स के साथ जावा 6 का उपयोग कर रहा हूं, तो ओवरराइड करने का सबसे अच्छा तरीका क्या है अनचाहे चेतावनी के बिना init विधि?
public class Child extends Parent
{
// warning: Map is a raw type. References to generic type Map<K,V> should be parameterized
public void init(Map properties) { }
}
यदि मैं जेनेरिक पैरामीटर जोड़ता हूं, तो मुझे मिलता है:
// error: The method init(Map<Object,Object>) of type Child has the same erasure as init(Map) of type Parent but does not override it
public void init(Map<Object,Object>) { ... }
// same error
public void init(Map<? extends Object,? extends Object>) { ... }
// same error
public void init(Map<?,?>) { ... }
यह त्रुटि इस बात पर ध्यान दिए बिना कि मैं एक विशिष्ट प्रकार, एक बाध्य वाइल्डकार्ड, या एक असंबद्ध वाइल्डकार्ड का उपयोग करता हूं। क्या चेतावनी के बिना गैर-जेनेरिक विधि को ओवरराइड करने के लिए कोई सही या बेवकूफ तरीका है, और @SuppressWarnings ("अनचेक") का उपयोग किए बिना?
@SuppressWarnings निश्चित रूप से यहां आपकी सबसे अच्छी शर्त है। बेकार है, लेकिन ऐसा तब होता है जब आप जेनेरिक को लाइब्रेरी में मजबूर करने का प्रयास करते हैं जो उनका उपयोग नहीं करता है। –
'@SuppressWarnings (" rawtypes ")' भी पर्याप्त होना चाहिए। –