2012-05-07 17 views
6

मैं सीख रहा हूँ जावा के सामान्य,instantiating सामान्य के पैरामीटर

class Person { 
    public static <T> T say() { 
     return new T; // this has error 
    } 
} 

मैं इस कोशिश की मैं सामान्य मापदंडों से प्राप्त प्रकार instantiating कुछ समस्या में रोड़ा (हालांकि इस सी # में संभव है): generics in Java - instantiating T

public static <T> T say(Class<?> t) { 
    return t.newInstance(); 
} 

त्रुटि:

incompatible types 
found : capture#426 of ? 
     required: T 

कि काम नहीं करता। Instantiating generics type in java

public class Abc<T> 
{ 

    public T getInstanceOfT(Class<T> aClass) 
    { 
     return aClass.newInstance(); 
    }  

} 

प्रकार विलोपन जावा लोगों कह रहे हैं यह है: निम्नलिखित ठीक लग रहा है, लेकिन यह कुछ वर्ग instantiating ठीक करता है, स्थिर विधि पर इस्तेमाल नहीं किया जा सकता है? क्या यह टाइप एरर की सीमा है?

इस समस्या के आसपास क्या काम है?

उत्तर

8

आप बहुत करीब थे। आप Class<?> को बदलने के लिए (जिसका अर्थ है "किसी भी प्रकार के एक वर्ग") Class<T> साथ (जिसका अर्थ है "प्रकार टी के एक वर्ग") की जरूरत है:

public static <T> T say(Class<T> t) throws IllegalAccessException, InstantiationException { 
    return t.newInstance(); 
} 
+0

+1 और स्वीकार किए जाते हैं, हालांकि के रूप में सी # के रूप में सुंदर नहीं (नहीं अपने गलती ;-))। बीटीडब्ल्यू, क्या वे टाइप एरर कहते हैं, यही कारण है कि यह सीधे टी को तुरंत चालू नहीं कर सकता है? – Hao

+1

@ हाओ: बिल्कुल: वास्तविक प्रकार का टी रनटाइम पर उपलब्ध नहीं है, इसलिए आपको इसे स्पष्ट करने के लिए क्लास ऑब्जेक्ट में पास करने की आवश्यकता है। –

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