2012-03-12 8 views
7

मुझे कुछ जेएक्सबी जेनरेट बीन्स मिल गए हैं जो एक पदानुक्रमित संरचना में हैं, उदा। एक बीन अन्य सेम की एक सूची रखती है। अब मैं कुछ बच्चे तत्व और विस्तारित बच्चों को रखने वाले मूल तत्व को विस्तारित करना चाहता हूं।जेएक्सबी विस्तारित ऑब्जेक्ट फैक्ट्री के साथ जेनरेट कोड बढ़ाता है - स्पष्ट रूप से अच्छा रहता है?

मेरा ParentEx कुछ अन्य इंटरफेस IParent लागू करता है जो Collection<IChild> लौटने की उम्मीद है। मेरा ChildEx लागू IChild। क्या मैं (Collection<IChild>)super.getChild() वापस कर सकता हूं जब super.getChild()List<Child> देता है? या यह करने का एक अच्छा तरीका है?

  • Child और Parent JAXB उत्पन्न सेम
  • ChildEx और ParentEx दिया इंटरफेस के JAXB सेम मानचित्रण के लिए अपने ही सेम कर रहे हैं। दोनों सेम ओवरराइड ObjectFactory
  • IChild और IParent इंटरफेस कुछ अन्य पुस्तकालय से की जरूरत हैं

संपादित करें: ग्रहण भी List<Child> से List<ChildEx> करने के लिए मेरे डाली नहीं करता है तो मैं कुछ बदसूरत मध्यस्थ वाइल्डकार्ड जोड़ने के लिए (List<ChildEx>)(List<?>)super.getChild()

+1

आपको ऐसा करने की आवश्यकता क्यों होगी? 'किसी भी मामले में' '" संग्रह "" है। जब तक मैं स्पष्ट नहीं हूं, 'आईपीएचआईएल' इंटरफ़ेस भी 'आईसीएचल्ड' कार्यान्वयन से पूरी तरह से संतुष्ट है? – user268396

+0

धन्यवाद, लेकिन नहीं, 'माता-पिता' के पास विधि है 'सूची getChild() 'और' माता-पिता 'का कहना है कि इसे' संग्रह 'वापस करने की आवश्यकता है। इसलिए मुझे अपने 'पेरेंटएक्स' में एक एक्सप्लीट कास्ट करना होगा। मैं स्वत: जेनरेटेड बीन्स को संशोधित नहीं करना चाहता हूं, इसलिए 'आईपैरेट' इंटरफ़ेस के लिए लगाए गए स्वत: जेनरेट किए गए सेम प्राप्त करने का एकमात्र तरीका है 'पेरेंटएक्स लागू करता है' माता-पिता ' –

+0

क्या नया ऐरेलिस्ट आपके साथ समाधान करता है? – Andrejs

उत्तर

3

लिए डाली जा सकती है, यह काम करना चाहिए:

return new ArrayList<IChild>(childExList); 

या (सुंदर नहीं लेकिन वाइल्डकार्ड कलाकारों से बचा जाता है):

return Arrays.asList(childExList.toArray(new IChild[]{})); 
1

कलाकारों जावा में यह Generic<SuperType> को Generic<Type> कास्ट करने के लिए सुरक्षित टाइप नहीं कर रहा है जो कि आप Collection<IChild> को List<Child> कास्टिंग द्वारा ऐसा करने के लिए कोशिश कर रहे हैं। List<Integer> को List<Object> पर डाला जा रहा है, जो आपको Integer या उपप्रकारों की सूची में कुछ भी डालने की अनुमति देगा।

Generic<Type>GenericSuperType<Type> पर टिप्पणी के लिए उपयोगकर्ता 268396 अंक के रूप में डालना सुरक्षित है।

आपको List<Child> को कुछ नए संग्रह में कॉपी करने की आवश्यकता होगी उदा।

List<Child> sourceList = ... 
List<IChild> targetList = new ArrayList<IChild>(); 
Collections.copy(targetList, sourceList); 

फिर आप लौट सकते हैं targetList जो परोक्ष Collection<IChild>

संबंधित मुद्दे