2013-04-09 64 views
7

Tôi đã tự hỏi liệu có bất kỳ hiểu biết nào để có được kích thước của một đối tượng mảng sử dụng sự phản chiếu không?Java Reflection - Lấy kích thước của đối tượng mảng

Tôi có Phương tiện đi lại thành phần chứa đối tượng mảng loại Xe.

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 
} 

tôi đã tự hỏi làm thế nào tôi sẽ có thể để có được kích thước của xe mảng trong xe thành phần bằng cách sử dụng Java Reflection?

tôi hiện có như sau:

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())); 
     } 
    } 
} 

mà kết quả trong các lỗi sau:

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

Bất kỳ ý tưởng?

Trả lời

11

Phương thức Array.getLength(array) mong đợi một phiên bản mảng. Trong mẫu mã bạn đang gọi nó trên kiểu mảng cho trường. Nó sẽ không hoạt động như một trường mảng có thể chấp nhận các mảng có độ dài bất kỳ!

Mã đúng là:

Array.getLength(field.get(vehicles)) 

hoặc đơn giản hơn

Array.getLength(vehicles.cars); 

hoặc đơn giản nhất

vehicles.cars.length 

Chăm sóc một giá trị null vehicles.cars mặc dù.

+2

Vâng, bạn cũng có thể nói cars.length :-) –

+0

Bạn nói đúng! Mã ban đầu quá phức tạp cho một điều đơn giản như vậy mà tôi bị rối tung lên và giữ sự phản chiếu ... – Guillaume

1

thử

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

Tôi cho rằng bạn phải vượt qua các đối tượng mảng chính nó để Array.getLength() vì vậy hãy thử

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

'field.get()' trên một đối tượng có trường đó. –

+0

Chắc chắn, phải vượt qua đối tượng xe! –

Các vấn đề liên quan