2012-12-06 15 views
7

मूल रूप से विपरीत of this question पर कनवर्ट करें। मैं एक वर्ग < टी > ऑब्जेक्ट को टाइप रेफरेंस < टी > ऑब्जेक्ट में कनवर्ट करना चाहता हूं।कक्षा <T> से टाइप रीफरेंस <T>

मैं कोशिश की है:

foo(Class<T> valueType) 
{ 
    TypeReference ref = new TypeReference<T>(){}; 
} 

लेकिन यह है कि सिर्फ कक्षाओं के सुपर वर्ग का एक प्रकार संदर्भ देता है। मैं भी करने की कोशिश की:

foo(Class<T> valueType) 
{ 
    TypeReference ref = new TypeReference<valueType>(){}; 
} 

और

foo(Class<T> valueType) 
{ 
    TypeReference ref = new TypeReference<valueType.getRawClass()>(){}; 
} 

लेकिन दूसरे दो संकलन नहीं है। मैं यह कैसे करु?

+0

क्या आप पोस्ट कर सकते हैं कि आप किस वर्ग को पैरामीटर के रूप में foo पास करते हैं और आप क्या प्राप्त करने की उम्मीद करते हैं? – hoaz

उत्तर

9

आप अपने प्रकार वापस जाने के लिए getType() ओवरराइड कर सकते हैं:

new TypeReference<T>(){ 
    @Override 
    public Type getType() { 
     return valueType; 
    } 
}; 
1

मैं एक TypeReference वस्तु के लिए एक कक्षा वस्तु परिवर्तित करना चाहते हैं।

ऐसा करना संभव हो सकता है, लेकिन मैं इसे हल करने वाली किसी भी यथार्थवादी समस्या के बारे में नहीं सोच सकता। TypeReference javadoc

इस वर्ग पूर्ण जेनरिक प्रकार की जानकारी पारित करने के लिए प्रयोग किया जाता है से इस जानकारी पर विचार करें, और प्रकार विलोपन के साथ समस्याओं (कि मूल रूप से क्रम कक्षा वस्तुओं से सबसे उपयोगी प्रकार संदर्भ को हटाता है) से बचें।

मेरी व्याख्या यह है कि क्लास ऑब्जेक्ट प्रदान करने के लिए आपको केवल प्रकार की जानकारी की आवश्यकता होती है जब क्लास ऑब्जेक्ट प्रदान कर सकता है। तो अगर आप यह भी समझ सकते हैं कि इस रूपांतरण को कैसे करें - आपने क्या हासिल किया है? कक्षा से टाइपराइफर में मिटाई गई प्रकार की जानकारी वापस करने का कोई तरीका नहीं है।

किसी भी समय मेरे पास ऐसी स्थिति है जहां मुझे क्लास के बजाय टाइप रेफरेंस की आवश्यकता है, मैं एक ठोस प्रकार संदर्भ उदाहरण बनाता हूं और उस ऑब्जेक्ट को रन टाइम पर पास करता हूं। कुछ इस तरह (संकलन नहीं कर सकते हैं, लेकिन आप अंदाजा हो)

foo(TypeReference<T> refArg) 
{ 
    TypeReference<T> ref = refArg; 
} 

// later on 
object.foo(new TypeReference<List<Set<MyObject>>(){}); 
+2

यह मुझे प्रत्येक कार्य को फिर से लिखने के बिना दोनों विधियों के लिए समर्थन प्रदान करने की अनुमति देता है – Jason

5

के रूप में अन्य लोगों ने बताया है, तो आप अच्छी तरह से गलत समस्या को हल करने जा सकता है। जो आप एकजुट करना चाहते हैं वह वास्तव में JavaType है, क्योंकि यही आपके इनपुट दोनों में परिवर्तित हो जाता है, और जैक्सन आंतरिक रूप से सब कुछ के लिए उपयोग करता है। और फिर आपके पास JavaType पर पहुंचने के लिए सुविधा विधियां हो सकती हैं।

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