Lister les sous classes d'une classe

CrazyCodeur Messages postés 24 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 18 janvier 2009 - 16 janv. 2009 à 11:36
CrazyCodeur Messages postés 24 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 18 janvier 2009 - 18 janv. 2009 à 17:23
Bonjour,

Je cherche à lister les sous classes d'une classe. Est ce possible?

Quelques informations :
<li>toutes ces classes (classe mère et classes filles) appartiennent au même package</li><li>la classe mère est une classe abstraite
</li>Merci d'avance :)

4 réponses

cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
16 janv. 2009 à 23:18
Salut,

ça s'appelle de l'introspection ou la réflexion..

voici un code qui répond à ce que tu cherches :

Class myClass = Class.forName("javax.swing.JButton");
for(Class c : myClass.getClasses()) {
     System.out.println(c.getCanonicalName());
}


Cordialement..
0
CrazyCodeur Messages postés 24 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 18 janvier 2009
18 janv. 2009 à 14:55
Salut, merci pour cette première réponse, mais je n'arrive toujours pas à faire ce que je veux (aucune sous classes trouvées... )
Je te donne quelques informations sur mon programme :
 
J'ai une classe P qui possède une map de C :

public abstract class P extends ...
{
    private HashMap<String, C> c;
}
Et ce que je veux, c'est que dans le constructeur, je remplisse ma map avec autant d'éléments qu'il existe de Caracteristiques.

Ma classe C est définie ainsi :
public class Caracteristique { ... }

Et voici l'exemple de deux sous classes de C :
public class C1 extends C{...}
public class C2 extends C{...}

Au final, dans la map de la classe P, je souhaite qu'il y ait C1 et C2

Si tu penses à quelque chose, je suis preneur !!

Merci d'avance.
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
18 janv. 2009 à 15:55
ah ok : moi je pensais que tu cherchais à déterminer les classes privées déclarées au sein d'une classe donnée..

pour ce que tu cherches, je ne pense pas qu'il existe une méthode toute prête qui te fournit les classes qui étendent une classe donnée. Mais tu peux te débrouiller en utilisant la méthode getSuperClass() de la classe Class en faisant comme suit :

public boolean doExtends(Class a, Class b) {
   return a.getSuperClass().getCanonicalName().equals(b.getCanonicalName());
}

par la suite, tu peux utiliser cette méthode pour parcourir un ensemble de classes candidates et vérifier..

pourvu que ça aide..
0
CrazyCodeur Messages postés 24 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 18 janvier 2009
18 janv. 2009 à 17:23
Merci pour cette idée. J'ai modifié ta fonction pour quelle parcours une liste de classe que l'on passe en paramètres :

    public static ArrayList<Class> getSousClasses(ArrayList<Class> sousClasses, Class superClasse) {
        ArrayList<Class> listeSousClasses= new ArrayList<Class>();
        for (Iterator iterator = sousClasses.iterator(); iterator
                .hasNext();)
        {
                  Class class1 = (Class) iterator.next();
                  if(class1.getSuperclass().getCanonicalName().equals(superClasse.getCanonicalName()))
                         listeSousClasses.add(class1);
        }
        return listeSousClasses;
    }
Maintenant, j'essaie de construire dynamiquement la liste des sous classes....
0
Rejoignez-nous