8

我想知道是否有人知道如何使用反射来获取数组对象的大小?

我有一个Vehicles组件,其中包含一个Car类型的数组对象。

车辆.java

public class Vehicles{

    private Car[] cars;

    // Getter and Setters
}

汽车.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)

有任何想法吗?

4

3 回答 3

15

该方法Array.getLength(array)需要一个数组实例。在您的代码示例中,您在该字段的数组类型上调用它。它不起作用,因为数组字段可以接受任何长度的数组!

正确的代码是:

Array.getLength(field.get(vehicles))

或更简单

Array.getLength(vehicles.cars);

或最简单的

vehicles.cars.length

不过要注意空vehicles.cars值。

于 2013-04-09T16:19:27.567 回答
4

我想你必须将数组对象本身传递给Array.getLength()所以尝试

Array.getLength(field.get(vehicles))
于 2013-04-09T16:22:08.440 回答
1

尝试

System.out.println(" Length: " + Array.getLength(field.get(vehicles)));
于 2013-04-09T16:21:54.403 回答