2012-06-26 7 views
5

मैं एक वर्ग के रूप में निम्नानुसार है:मुश्किल स्थिर सामान्य विधि है जो अपने आप हो सकता है एक सामान्य

public class MyConverter { 
    public <T> T convert (Object o, String typeidentifier, T dummy) 
    { 
     ... do some conversions such as a java array to an ArrayList or vice versa 
     ... based on a typeidentifier syntax similar to Class.getName() but which 
     ... embeds information about generic subtypes 
    } 
} 

और कुछ इस तरह सामान्य करने के लिए सक्षम होना चाहता हूँ:

int[] ar = {...}; 
ArrayList<Integer> dummy = null; 
Integer elem = MyConverter.convert(ar, "java.util.ArrayList<Integer>", dummy) 
        .get(15); 

यही कारण है, परिवर्तित अपने आप में एक सामान्य उदाहरण हो सकता है में T है, और मुझे लगता है कि पाया काम करने के लिए इस लक्ष्य को, मैं एक पूरी तरह से टाइप किया डमी पारित करने के लिए है, के रूप में ArrayList.class जावा संकलक पर्याप्त जानकारी है कि यह एक ArrayList<Integer> है नहीं देंगे पाने के लिए अगर मैंनेका उपयोग किया T dummy के बजाय।

मैं कुछ याद आ रही है? क्या डमी की आवश्यकता के बिना दोनों लिखने और कन्वर्ट करने का कोई तरीका है?

+2

आप पूरा करने के लिए कोशिश कर रहे हैं? यह जटिल पर प्रतीत होता है। – aglassman

+0

आप की तरह 'ArrayList .class' कुछ के लिए करना चाहते हैं? '(कक्षा >) (वस्तु) ArrayList.class': आप एक डाली उपयोग कर सकते हैं। हालांकि, यह भी बहुत सुरुचिपूर्ण नहीं लग रहा है। –

उत्तर

8

अपनी कॉल पर प्रकार निर्दिष्ट करें, बजाय दे जावा प्रकार का अनुमान लगा:

Integer elem = MyConverter.<ArrayList<Integer>>convert(ar, "java.util.ArrayList<Integer>"); 

This link इस (शांत) वाक्य रचना का वर्णन है।

+0

यह वही है जो मैं ढूंढ रहा था। ओरेकल की साइट पर यह कहां से दस्तावेज है? –

+0

मैंने एक लिंक जोड़ा जो इसका वर्णन करता है। fyi, मैं इस छोटे-ज्ञात वाक्यविन्यास पर ठोकर खा रहा था जब ग्रहण का उपयोग परिणाम परिवर्तक (जिसे तब जावा को प्रकार का अनुमान लगाने के लिए किसी भी मौके को हटा दिया गया था) और ग्रहण ने इस वाक्यविन्यास का उपयोग करके प्रकार डाला। कहने की जरूरत नहीं है, मैंने जेनेरिक सोना मारा और तब से इसका इस्तेमाल किया है। इस प्रकार में लॉक करने के लिए कक्षा * बस * में गुजरने से काफी अच्छा है। – Bohemian

3

Arrays.asList की तरह दिखता है इस तरह की है, यह एक देशी सरणी लेने के लिए और यह एक ArrayList में बदल जाएगा।

कार्यान्वयन निम्नलिखित की तरह कर सकते हैं:

public static <T> List<T> asList(T... a) { 
    ArrayList<T> arr = new ArrayList<T>(); 
    for (T item: a) { 
     arr.add(item); 
    } 
    return arr; 
} 
+0

मैं मानता हूँ, Arrays.asList विधि आप का उपयोग करना चाहें कैसा दिखता है। – aglassman

+0

मैं केवल अपने ऐरेलेलिस्ट रूपांतरणों की तुलना में अपने कन्वर्ट फ़ंक्शन में और अधिक कर रहा हूं। इसके अलावा, हैश मैप रूपांतरण और अन्य जटिल चीजें। मुझे अन्य उत्तरों की अधिक सामान्य विधि की आवश्यकता है। –

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