2010-07-30 7 views

उत्तर

28

यहां उपयोग की जाने वाली चाल यह है कि जेनेरिक सुपर प्रकार के हस्ताक्षर उप-वर्गों में संग्रहीत होते हैं और इस प्रकार मिटाते हैं।

आप एक गुमनाम उपवर्ग new TypeLiteral<List<String>>() {} बनाते हैं Guice उस पर getClass().getGenericSuperclass() फोन और एक java.lang.reflect.ParameterizedType जिस पर एक विधि getActualTypeArguments()List<String>ParameterizedType का एक उदाहरण के रूप में प्राप्त करने के लिए मौजूद है प्राप्त कर सकते हैं।

7

गुमनाम प्रकारों, उप-वर्गीकरण और तथ्य यह है कि जावा पूरी तरह से सभी सामान्य घोषणाओं को मिटा नहीं देता है।

यदि आप बारीकी से देखते हैं तो टाइपलाइटरल में संरक्षित कन्स्ट्रक्टर है, तो आप एक नया {} बनाते समय एक नया {} बनाते हैं जो TypeLiteral का अज्ञात सबक्लास बनाता है।

जावा जेनेरिक घोषणाएं क्लास और विधि घोषणाओं पर संरक्षित हैं, इसलिए यदि मैं इसे लिखूं।

public abstract class Class1<T> 
{ 
} 

public class Class2 extends Class1<Integer> 
{ 
} 

मैं वास्तव में Class1 में कोड है कि पता लगा सकते हैं कि अपनी ही सामान्य प्रकार पूर्णांक है अगर Class2 उपवर्ग था लिख ​​सकते हैं।

उपयुक्त विधियों के लिए java.lang.Class API देखें (उनके नाम पर जेनेरिक है)।

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