जावा < 8 में, लौटने "असुरक्षित" वस्तुओं (वस्तुओं या नल), मैं उपवर्ग में वापसी प्रकार के विशेषज्ञ करने में सक्षम था:वैकल्पिक <> और वापसी प्रकार संकुचन
class A {}
class B extends A {}
interface Sup { A a(); /* returns A instance, or null */ }
interface Sub extends Sup { B a(); }
जावा 8 में, यदि मैं चाहता हूँ मेरी एपीआई बनाने के लिए "सुरक्षित", मैं Optional<A>
बजाय लौटना चाहिए "कच्चे" A
:
interface Sup { Optional<A> a(); }
interface Sub extends Sup { Optional<B> a(); }
लेकिन संकलन नहीं है! क्योंकि Optional<B>
Optional<A>
का उप-वर्ग नहीं है।
मुझे इस समस्या को हल करने के लिए कैसे माना जाता है? अपने माता पिता के सीमा वाइल्डकार्ड का उपयोग करने के लिए
[विचारों के स्कूल] (http://stackoverflow.com/q/9561295/1079354) जो मानते हैं कि 'वैकल्पिक' प्रतिमान में स्थानांतरित करने से कम एनपीई पैदा होते हैं, और कोड को व्यवहार करने के बारे में बेहतर कारण बताते हैं वास्तव में है। – Makoto
@ मकोटो मुझे तर्क पता है, और मैं उनके साथ सहमत हूं (मैं हर समय 'वैकल्पिक' का उपयोग करता हूं)। अंत में मेरी टिप्पणी '?' और 'वैकल्पिक' –
के संयोजन के बारे में थी, ऊपरी बाउंड का उपयोग करना सबसे बुरी चीज नहीं हो सकती है; बहुत ही उचित कारण हो सकते हैं कि कोई ऐसा क्यों करेगा। जिस कारण से मैंने प्रतिक्रिया व्यक्त की थी, क्योंकि आपने 'शून्य 'का उल्लेख किया था। – Makoto