リフレクションを使用して配列オブジェクトのサイズを取得する方法を知っている人はいないかと思いました。
Carタイプの配列オブジェクトを含むVehiclesコンポーネントがあります。
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
}
=を使用してVehiclesコンポーネント内のcars配列のサイズを取得するにはどうすればよいか疑問に思いました。 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
Nullの世話をするvehicles.cars
値ですが。
配列オブジェクト自体をArray.getLength()
に渡す必要があると思うので、試してみてください
Array.getLength(field.get(vehicles))
試してみてください
System.out.println(" Length: " + Array.getLength(field.get(vehicles)));