我想知道是否知道如何使用反射来获取数组对象的大小?
我有 Vehicles 组件,其中包含 Car 类型的数组对象。
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 Reflection在 vehicle 组件中获得 cars 数组的大小?
我目前有以下内容:
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)
有什么想法吗?
答案 0 :(得分:12)
方法Array.getLength(array)
需要一个数组实例。在您的代码示例中,您将在字段的数组类型上调用它。它不起作用,因为数组字段可以接受任何长度的数组!
正确的代码是:
Array.getLength(field.get(vehicles))
或更简单
Array.getLength(vehicles.cars);
或最简单
vehicles.cars.length
请注意空vehicles.cars
值。
答案 1 :(得分:4)
我想你必须将数组对象本身传递给Array.getLength()
,所以试试
Array.getLength(field.get(vehicles))
答案 2 :(得分:1)
试
System.out.println(" Length: " + Array.getLength(field.get(vehicles)));