Java Reflection - Get size of array object
arrays, illegalargumentexception, java, reflection, size
Solution
The method `Array.getLength(array)` expects an array instance. In you code sample you are calling it on the array type for the field. It won't work as an array field can accept arrays of any lengths!
The correct code is:
Array.getLength(field.get(vehicles))
or simpler
Array.getLength(vehicles.cars);
or simplest
vehicles.cars.length
Take care of a null `vehicles.cars` value though.
Problem
I was wondering if any knows hows to get the size of an array object using reflection? I have a Vehicles component containing an array object of type 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 } ``` I was wondering how I would be able to get the size of the cars array within the vehicles component using Java Reflection? I current have the following: ``` 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())); } } } ``` which results in the following error: ``` java.lang.IllegalArgumentException: Argument is not an array at java.lang.reflect.Array.getLength(Native Method) ``` Any ideas?