Cela permet par exemple, de connaitre les champs privés ou public, les méthodes...
Imaginons maintenant, que vous fassiez de l'introspection sur un objet avec le code suivant :
objetInspecte = .... // Tout les champs declarer, y compris prive Field[] fields = objetInspecte.getClass().getDeclaredFields() ; Class generiqueClass ; // Valeur du champs introspecte Object valeurDuChamps ; for(Field field : fields) { // Rend le champ accessible et lecture/ecriture field.setAccessible(true); valeurDuChamps = field.get(objetInspecte) ; }
Oui, mais voilà, vous avez un liste, de ce fait field.getType().getCanonicalName() renvoie java.util.List.
Très bien, maintenant vous pouvez faire un new ArrayList pour créer la liste si le champs est null.
A présent, vous souhaitez, dans cette liste ajouter un élément. Mais de quel type est cette liste ? String, Integer, un tout autre objet ?
Pour cela, Java fournit une API. Voici un exemple :
// Type pour les generique ParameterizedType pt ; // Class generique Class generiqueClass ; // On recupere le type generique pt = (ParameterizedType) field.getGenericType() ; generiqueClass = (Class) pt.getActualTypeArguments()[0];
La valeur de generiqueClass ? Et bien nous découvrons, que c'est une liste de Date par exemple !
Pour créer un objet, rien de plus simple : generiqueClass.newInstance().
Aucun commentaire:
Enregistrer un commentaire