2013-04-09 5 views
7

मैं सोच रहा था कि क्या कोई जानता है कि प्रतिबिंब का उपयोग करके सरणी ऑब्जेक्ट का आकार कैसे प्राप्त किया जाए?जावा प्रतिबिंब - सरणी ऑब्जेक्ट का आकार प्राप्त करें

मैं एक वाहन प्रकार कार की एक सरणी ऑब्जेक्ट वाला घटक है।

Vehicles.java

public class Vehicles{ 

    private Car[] cars; 

    // Getter and Setters 
} 

Car.java

public class Car{ 

    private String type; 
    private String make; 
    private String model; 

    // Getter and Setters 
} 

मैं सोच रहा था कि कैसे मैं कारों का आकार प्राप्त करने में सक्षम हो जाएगा सरणी वाहनों के भीतर जावा प्रतिबिंब का उपयोग कर घटक?

मैं वर्तमान निम्नलिखित है:

final Field[] fields = vehicles.getClass().getDeclaredFields(); 

if(fields.length != 0){ 
    for(Field field : fields){ 
     if(field.getType().isArray()){ 
      System.out.println("Array of: " + field.getType()); 
      System.out.println(" Length: " + Array.getLength(field.getType())); 
     } 
    } 
} 

जो निम्न त्रुटि में परिणाम है:

java.lang.IllegalArgumentException: Argument is not an array 
    at java.lang.reflect.Array.getLength(Native Method) 

कोई भी विचार?

उत्तर

11

विधि Array.getLength(array) एक सरणी उदाहरण की अपेक्षा करता है। कोड कोड में आप इसे फ़ील्ड के लिए सरणी प्रकार पर कॉल कर रहे हैं। यह एक सरणी क्षेत्र के रूप में काम नहीं करेगा किसी भी लंबाई के सरणी स्वीकार कर सकते हैं!

सही कोड है:

Array.getLength(field.get(vehicles)) 

या सरल

Array.getLength(vehicles.cars); 

या सरल

vehicles.cars.length 

हालांकि एक अशक्त vehicles.cars मूल्य का ख्याल रखें।

+2

ठीक है, तुम भी कह सकते हैं cars.length :-) –

+0

आप सही कर रहे हैं! मूल कोड इतनी सरल चीज के लिए इतना जटिल था कि मैं गड़बड़ हो गया और प्रतिबिंब रखा ... – Guillaume

1

कोशिश

System.out.println(" Length: " + Array.getLength(field.get(vehicles))); 
4

मुझे लगता है कि आप पास करना सरणी वस्तु ही Array.getLength() ताकि कोशिश

Array.getLength(field.get(vehicles)) 
+0

'field.get()' उस ऑब्जेक्ट पर जो उस क्षेत्र में होगा। –

+0

निश्चित रूप से, वाहन वस्तु को पारित करना होगा! –

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