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,getDeclaredFieldspermet d’obtenir la liste des attributs de cette classe, etgetSuperclasspermet 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 etgetDeclaringClassdonne 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.