gpt4 book ai didi

Java Reflection - 获取数组对象的大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:36 25 4
gpt4 key购买 nike

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

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

Vehicles.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 反射获取 vehicles 组件中 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)

有什么想法吗?

最佳答案

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

正确的代码是:

Array.getLength(field.get(vehicles))

或更简单

Array.getLength(vehicles.cars);

或最简单的

vehicles.cars.length

尽管如此,请注意空 vehicles.cars 值。

关于Java Reflection - 获取数组对象的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com