पहला आविष्कार ArrayList<Integer>
के अज्ञात उप-वर्ग का उदाहरण गुजर रहा है। इसलिए, यह करने के लिए इसी तरह की है:
class YourClass extends ArrayList<Integer>
और आप के रूप में विधि लागू: आपके मामले में YourClass
के जेनेरिक सुपर क्लास या अनाम वर्ग
printType(new YourClass());
ArrayList<Integer>
ही है। तो, वह आउटपुट स्पष्ट है।
आपके दूसरे मामले के लिए, आप ArrayList<Integer>
का एक उदाहरण पास कर रहे हैं। और इस वर्ग की परिभाषा लगता है:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
तो, सामान्य सुपर क्लास यहाँ AbstractList<E>
है।
सामान्य प्रकार शेयर एक ही Class
उदाहरण के आरंभ होने:
ध्यान दें कि सभी ArrayList
की इन्स्टेन्शियशन कार्यावधि में एक ही कक्षा का हिस्सा:
new ArrayList<Integer>().getClass() == new ArrayList<String>().getClass();
ऊपर तुलना आप true
दे देंगे। दोनों क्योंकि getClass()
मंगलाचरण तुम्हें वापस देता है:
class java.util.ArrayList
JLS 8.1.2: Generic Classes and Type Parameters देखें:
एक सामान्य वर्ग घोषणा पैरामिट्रीकृत प्रकार का एक सेट को परिभाषित करता है (§4.5), प्रकार के प्रत्येक संभव मंगलाचरण के लिए एक पैरामीटर अनुभाग तर्क टाइप करके। इन सभी पैरामीटर प्रकारों को रन टाइम पर कक्षा साझा करें।
उदाहरण के लिए
, कोड को क्रियान्वित:
Vector<String> x = new Vector<String>();
Vector<Integer> y = new Vector<Integer>();
boolean b = x.getClass() == y.getClass();
चर b
मूल्य true
पकड़े का परिणाम देगा।
दूसरे शब्दों में, getGenericSuperClass()
विधि आप वास्तविक प्रकार तर्क करते समय अपने वर्ग instantiating आप उपयोग करें, लेकिन प्रकार वर्ग यह प्रदान कर रहा है में इस्तेमाल किया पैरामीटर नहीं देंगे। अब, चूंकि java.util.ArrayList
का सामान्य सुपरक्लास AbstractList<E>
है। और इसलिए आपको प्राप्त प्रकार पैरामीटर केवल E
होगा।
आप क्या करने की कोशिश कर रहे हैं? –
अच्छी तरह से आप अपनी सूची के टाइपपरमीटर को प्रिंट कर रहे हैं –
मैं रनटाइम में प्रकार का पैरामीटर प्राप्त करने का प्रयास कर रहा हूं –