2013-04-09 60 views
7

我想知道是否有知道如何使用反射來獲取數組對象的大小?Java反射 - 獲取數組對象的大小

我有一個車輛包含類型的數組對象的組件

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 
} 

我不知道我怎麼會能夠得到車的尺寸陣列車輛內組件使用Java反射?

我目前有以下幾種:

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 :-) – 2013-04-09 16:23:39

+0

你是對的!原始代碼對於如此簡單的事情來說太複雜了,以至於我會搞砸並且保持反射... – Guillaume 2013-04-09 16:27:41

1

嘗試

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

我想你必須通過數組對象本身Array.getLength()所以儘量

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

'field.get()'對象上有該字段。 – 2013-04-09 16:25:36

+0

當然,必須通過車輛對象! – 2013-04-09 16:37:35