मैं एक विरासत वर्ग उस वर्ग अपने आप में एक सामान्य लेकिन इसके तरीकों में से एक नहीं है में सामान्य वर्ग परिणामों के संदर्भ प्रकार जेनरिक का उपयोग करता है वापसी तारों का संग्रह वापस करने के लिए। इसलिए मैं getStuff()
से अधिक पुनरावृति कर सकते हैं और एक String
के तत्वों कास्ट करने के लिए कोई आवश्यकता नहीं है:गैर सामान्य गैर सामान्य वापसी प्रकार
Thing t = new Thing();
for (String s: t.getStuff()) // valid
{ ... }
हालांकि, अगर मैं Thing
ही बदल एक सामान्य हो सकता है लेकिन सब कुछ और कुछ ही रखने के लिए:
public class Thing<T> {
public Collection<String> getStuff() { ... }
}
और फिर Thing
, getStuff()
पर गैर-जेनेरिक संदर्भ का उपयोग करते रहें अब Collection<String>
लौटाता है और इसके बजाय एक गैर-टाइप Collection
देता है। इस प्रकार क्लाइंट कोड संकलित नहीं करता है:
Thing t = new Thing();
for (String s: t.getStuff()) // compiler complains that Object can't be cast to String
{ ... }
यह क्यों है? कामकाज क्या हैं?
मेरा अनुमान है कि एक सामान्य वर्ग के गैर-जेनेरिक संदर्भ का उपयोग करके, जावा पूरे वर्ग के लिए सभी जेनेरिकों को बंद कर देता है। यह दर्द है, क्योंकि अब मैंने जेन को सामान्य बनाकर अपना क्लाइंट कोड तोड़ दिया है।
संपादित करें: मैं उपरोक्त उदाहरण कोड में सूचीबद्ध नहीं है, जो किसी अन्य विधि के लिए जेन जेनेरिक बना रहा हूं। मेरा सवाल शैक्षणिक है कि उपर्युक्त क्यों नहीं किया जा सकता है।
मैं किसी अन्य विधि (मेरे उदाहरण में सूचीबद्ध नहीं) के कारण जेन सामान्य बना रहा हूं। –
यदि चीज चीज है (और > बात नहीं है), तो यह संकलित नहीं होगा। आगे बढिए और इसे आजमाइए। –
प्रश्न को गलत समझा, बदल गया। – cletus