Java反射-获取数组对象的大小

Java反射-获取数组对象的大小,java,arrays,reflection,size,illegalargumentexception,Java,Arrays,Reflection,Size,Illegalargumentexception,我想知道是否有人知道如何使用反射获得数组对象的大小 我有一个车辆组件,其中包含一个车辆类型的数组对象 Vehicles.java public class Vehicles{ private Car[] cars; // Getter and Setters } public class Car{ private String type; private String make; private String model; // Gett

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

我有一个车辆组件,其中包含一个车辆类型的数组对象

Vehicles.java

public class Vehicles{

    private Car[] cars;

    // Getter and Setters
}
public class Car{

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

    // Getter and Setters
}
Car.java

public class Vehicles{

    private Car[] cars;

    // Getter and Setters
}
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)

有什么想法吗?

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

正确的代码是:

Array.getLength(field.get(vehicles))
或者更简单

Array.getLength(vehicles.cars);
或者最简单的

vehicles.cars.length
注意一个空的
车辆。但是车辆
值。

试试

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

我想您必须将数组对象本身传递给
array.getLength()
,所以请尝试

Array.getLength(field.get(vehicles))

嗯,你不妨说汽车。长度:-)你说得对!对于这样一个简单的事情,原始代码是如此复杂,以至于我搞砸了,并将反射…
字段。get()
保留在一个对象上,该对象将具有该字段。当然,必须通过vehicles对象!