2011-11-11 27 views
7

का उपयोग करके एक ऐरे को अनपॅक करना मैं ऑब्जेक्ट फ़ील्ड को प्रतिबिंबित करने से प्राप्त एक सरणी को अनपैक करने का प्रयास कर रहा हूं। मैंने सामान्य फ़ील्ड का मान किसी ऑब्जेक्ट पर सेट किया है। यदि यह किसी सरणी मैं तो मेरे unpackArray विधि में एक सरणी (कोई बात नहीं क्या अपने प्रकार) करने के लिए अपने सामान्य वस्तु डाली और उसकी सामग्री को निकालने के लिएप्रतिबिंब

fields[i].setAccessible(true); 
     String key = fields[i].getName(); 
     Object value = fields[i].get(obj); 

     if (value.getClass().isArray()){ 
      unpackArray(value); 
     } 

चाहते है, मैं कास्टिंग वस्तु मूल्य java.util की कोशिश की है .रे, java.reflect.Array और ऐरे [] लेकिन हर बार यह मुझे देने नहीं है।

क्या कोई तरीका है कि मैं अपने ऑब्जेक्ट को जेनेरिक सरणी में डाल सकता हूं?

कई धन्यवाद सैम

उत्तर

10

सभी सरणियों के केवल माता पिता वर्ग वस्तु है।

Object[] के रूप में किसी सरणी के मान निकालने के लिए आप इसका उपयोग कर सकते हैं।

public static Object[] unpack(Object array) { 
    Object[] array2 = new Object[Array.getLength(array)]; 
    for(int i=0;i<array2.length;i++) 
     array2[i] = Array.get(array, i); 
    return array2; 
} 
+0

धन्यवाद इतना, शानदार ढंग से काम करता है –

2

दुर्भाग्य से आदिम सरणियों और वस्तु सरणी पूर्वज के रूप में एक आम सरणी वर्ग नहीं है। तो अनपॅकिंग के लिए एकमात्र विकल्प मुक्केबाजी आदिम सरणी है। यदि आप इस विधि को कॉल करने से पहले शून्य जांच करते हैं और आरे हैं तो आप कुछ चेक हटा सकते हैं।

public static Object[] unpack(final Object value) 
{ 
    if(value == null) return null; 
    if(value.getClass().isArray()) 
    { 
     if(value instanceof Object[]) 
     { 
      return (Object[])value; 
     } 
     else // box primitive arrays 
     { 
      final Object[] boxedArray = new Object[Array.getLength(value)]; 
      for(int index=0;index<boxedArray.length;index++) 
      { 
       boxedArray[index] = Array.get(value, index); // automatic boxing 
      } 
      return boxedArray; 
     } 
    } 
    else throw new IllegalArgumentException("Not an array"); 
} 

टेस्ट: http://ideone.com/iHQKY