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?
You can simply use the Object. keys() method along with the length property to get the length of a JavaScript object. The Object. keys() method returns an array of a given object's own enumerable property names, and the length property returns the number of elements in that array.
One way to get an estimate of an object's size in Java is to use getObjectSize(Object) method of the Instrumentation interface introduced in Java 5. As we could see in Javadoc documentation, the method provides “implementation-specific approximation” of the specified object's size.
1. The length variable is applicable to an array but not for string objects whereas the length() method is applicable for string objects but not for arrays.
An array's length instance variable is constant. – that is, arrays are assigned a constant size when they are instantiated.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With