8

リフレクションを使用して配列オブジェクトのサイズを取得する方法を知っている人がいるかどうか疑問に思っていましたか?

タイプ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 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)

何か案は?

4

3 に答える 3

15

メソッドArray.getLength(array)は配列インスタンスを想定しています。コードサンプルでは、​​フィールドの配列型で呼び出しています。配列フィールドは任意の長さの配列を受け入れることができるため、機能しません!

正しいコードは次のとおりです。

Array.getLength(field.get(vehicles))

またはより簡単

Array.getLength(vehicles.cars);

または最も単純な

vehicles.cars.length

ただし、nullvehicles.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 に答える