Réflexion Java - d'Obtenir la taille de l'objet array
Je me demandais si l'un sait comment procéder pour obtenir la taille d'un objet de tableau à l'aide de la réflexion?
J'ai un Véhicules composant contenant un tableau d'objet de type Voiture.
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
}
Je me demandais comment j'allais être en mesure d'obtenir la taille de la voitures tableau à l'intérieur de la véhicules composant à l'aide de Java Réflexion?
Je actuelle est la suivante:
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()));
}
}
}
qui génère l'erreur suivante:
java.lang.IllegalArgumentException: Argument is not an array
at java.lang.reflect.Array.getLength(Native Method)
Des idées?
OriginalL'auteur Harvey Sembhi | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
La méthode
Array.getLength(array)
s'attend à une occurrence de array. En vous un exemple de code que vous appelez sur le type de tableau pour le champ. Il ne fonctionne pas comme un tableau de champ peut accepter des tableaux de toutes les longueurs!Le code correct est:
ou plus simple
ou plus simple
Prendre soin d'une valeur null
vehicles.cars
de valeur.Vous avez raison! Le code d'origine était si compliqué pour une chose si simple que je reçois foiré et a gardé la réflexion...
OriginalL'auteur Guillaume
Je suppose que vous avez à passer le tableau de l'objet lui-même à
Array.getLength()
donc, essayezfield.get()
sur un objet qui aurait ce domaine.Bien sûr, passer les véhicules de l'objet!
OriginalL'auteur Gyro Gearless
essayer
OriginalL'auteur Evgeniy Dorofeev