यहाँ से अलग कुछ कोड मैं पर काम कर रहा हूँ का एक उदाहरण है:जावा जेनेरिक्स अपेक्षित वापसी प्रकार वास्तविक
public interface FooMaker<T extends Enum<T> & FooType>
{
public List<Foo<T>> getFoos(String bar);
}
आइए आगे मान लेते हैं कि FooMaker के कई अलग अलग ठोस कार्यान्वयन किया जाएगा। तो मैंने FooMakers का उपयोग करने के लिए कुछ कोड लिखा था।
FooMaker<?> maker = Foos.getRandomMaker();
List<Foo<?>> fooList = maker.getFoos("bar"); //error here!
कोड की दूसरी पंक्ति समस्या होती है, ग्रहण मुझसे कहता कोड होना चाहिए:
FooMaker<?> maker = Foos.getRandomMaker();
List<?> fooList = maker.getFoos("bar");
मैं मुसीबत समझ क्यों सूची में पैरामिट्रीकृत प्रकार के रूप में फू घोषणा जाना पड़ता है हो रही है वापसी प्रकार सही करने के लिए दूर।
कोई विचार?
'टी 0 एन37 और फ़ूटाइप' क्या होगा? टी को एक enum होना और FooType का विस्तार करना है, लेकिन आप एक enum विस्तार नहीं कर सकते हैं! –
जेनरिक के साथ, कीवर्ड "विस्तार" का उपयोग कार्यान्वित इंटरफेस का वर्णन करने के लिए किया जाता है। FooType भी एक इंटरफ़ेस है और आप अभी भी विस्तारित कीवर्ड का उपयोग करेंगे। – Nick