Introspection et types paramétrés en Java
Mardi 19 juin 2007Plusieurs fois déjà , j’ai eu recours à l’introspection pour extraire la structure de donnée encapsulée dans une classe Java. Avec quelques méthodes classiques des classes Class
et Field
, on réussit à extraire pas mal de chose :
- Dans un objet de type
Class
,getDeclaredFields
permet d’obtenir la liste des attributs de cette classe, etgetSuperclass
permet de naviguer dans les classes parentes de l’arbre d’héritage pour récupérer les attributs hérités. - Dans un objet de type
Field
,getName()
donne le nom de cet attribut etgetDeclaringClass
donne son type déclaré (l’instance pouvant être d’un type héritant de ce type déclaré).
Viennent ensuite les types paramétrés qui contiennent de l’information supplémentaire sur la structure de données. En effet un attribut de type List<integer></integer>
, ne sera considéré que comme un attribut de type List
avec les méthodes précédentes. Or, le fait que cette liste contiennent des entiers est une information importante. De même un attribut de type List<list <MaClasse>></list>
, n’est pas une vulgaire liste, mais bien un élément complexe de la structure de donnée. Il est donc important de bien gérer ces types paramétrés lors d’une telle introspection.