package fr.imag.classview.app ; import java.util.List ; import java.util.ArrayList ; import java.util.Iterator ; /** * Classe permettant d'explorer une hierarchie de classes java. * Cette classe montre l'utilisation de l'introspection en java * et plus particulierement l'utilisation de la classe java.lang.Class. * Donne egalement un exemple d'utilisation des classes java.util.List, * et java.util.Iterator. **/ public class ListSuperclasses { /** * Ajoute en fin de liste les superclasses de la classes donnees * (incluant la classe elle meme). * @param all la liste a laquelle on ajoute les superclasses. **/ private static void addSuperclasses(List/*XXX*/ all, Class/*XXX*/ root) { all.add(root) ; Class superc = root.getSuperclass() ; if (superc != null) addSuperclasses(all, superc) ; } /** * Donne la liste des superclasses d'une classe * (incluant la classe elle meme). * Retourne une liste vide si le nom specifie ne correspond pas * a une classe ou si elle fait reference a une classe ne pouvant * etre chargee. * @param classname le nom de la classe a partir de laquelle on part. * Le nom doit etre qualifie, c'est a dire comporter * le nom de package. Par exemple java.util.Set * @return la liste des superclasses. * La permiere classe est la classe elle meme, la derniere * est java.lang.Object. **/ public static List/*XXX*/ superclasses(String/*XXX*/ classname) { // cree une liste vide List/*XXX*/ all = new ArrayList() ; try { // Obtient une classe a partir de son nom Class c = Class.forName(classname) ; addSuperclasses(all,c) ; } catch (Throwable e) {} return all ; } /** * Exemple d'utilisation. * @param args inutilise. **/ public static void main(String[] args) { // Affichage du nb de superclasses de java.io.File List l1 = superclasses("java.io.File") ; System.out.println("** java.io.File has "+(l1.size()-1)+" super classes") ; // Affichage du nb de superclasses de javax.swing.JButton List l2 = superclasses("javax.swing.JButton") ; System.out.println("** javax.swing.JButton has "+(l2.size()-1)+" super classes") ; // Affichage des superclasses // Montre un exemple de parcours de List a partir d'un iterator // rigoureusement identique au parcours d'ensemble for (Iterator fi=l2.iterator(); fi.hasNext(); ) { Class f = (Class)fi.next() ; System.out.println(" "+f.getName()) ; } } }