IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Reflection]Recherche des classes implémentant une interface


Sujet :

Langage Java

  1. #1
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut [Reflection]Recherche des classes implémentant une interface
    Je cherche un moyen de "récupérer" toutes les classes du classpath qui implémente une des mes interfaces.

    J'imagine qu'il doit y avoir moyen par réfléction, mais je ne trouve pas "comment".

    Est-ce qu'il existe un moyen de récupérer un Iterator sur les classes du classpath ?

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Hikage
    Est-ce qu'il existe un moyen de récupérer un Iterator sur les classes du classpath ?
    Non, car les classes ne sont pas toutes chargé au démarrage...

    Tu peux toujours faire cela toi même, en parcourant tous les éléments du classpath :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( System.getProperty("java.class.path") );
    Par contre cela risque d'être assez lourd car tu devras chargé toutes les classes en mémoire...

    Bon courage...

    a++

  3. #3
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Je suis pas sûr d'avoir saisi, mais si j'ai bien compris tu veux faire un truc dans le genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public boolean implementsInterface(Object o, String refInterfaceName) {
    		Class c = o.getClass();
    		Class[] interfaces = c.getInterfaces();
    		for (int i = 0; i < interfaces.length; i++) {
    			String interfaceName = interfaces[i].getName();
    			System.out.println(interfaceName);
                            if(interfaceName.equals(refInterfaceName))
                     	        return true;
                    }
                    return false;
    	}

  4. #4
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par sozie9372
    Je suis pas sûr d'avoir saisi, mais si j'ai bien compris tu veux faire un truc dans le genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public boolean implementsInterface(Object o, String refInterfaceName) {
    		Class c = o.getClass();
    		Class[] interfaces = c.getInterfaces();
    		for (int i = 0; i < interfaces.length; i++) {
    			String interfaceName = interfaces[i].getName();
    			System.out.println(interfaceName);
                            if(interfaceName.equals(refInterfaceName))
                     	        return true;
                    }
                    return false;
    	}
    Il faut aussi parcourir les interfaces des superclasses, car Class.getInterfaces() retournent que les interfaces "directes"

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Il serait peut-être plus intêressant d'utiliser la méthode isAssignableFrom() de la classe Class.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public boolean implementsInterface(Object o, String refInterfaceName) 
       throws ClassNotFoundException {
        return Class.forName(refInterfaceName).isAssignableFrom(o.getClass());
    }

  6. #6
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par le y@m's
    Il serait peut-être plus intêressant d'utiliser la méthode isAssignableFrom() de la classe Class.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public boolean implementsInterface(Object o, String refInterfaceName) 
       throws ClassNotFoundException {
        return Class.forName(refInterfaceName).isAssignableFrom(o.getClass());
    }
    Ah merci, je vais m'en servir pour mon système de plugin, ça sera plus propre

Discussions similaires

  1. Trouver toutes les classes implémentant une interface.
    Par BugFactory dans le forum Langage
    Réponses: 20
    Dernier message: 31/08/2009, 11h10
  2. Connaitre la liste des classes implémentant une interface
    Par luckyvae dans le forum Général Java
    Réponses: 5
    Dernier message: 23/12/2008, 12h10
  3. Réponses: 3
    Dernier message: 08/07/2008, 15h31
  4. Réponses: 4
    Dernier message: 08/02/2008, 13h01
  5. Outil pour rechercher des class dans une Dll
    Par Jimmy_S dans le forum ASP.NET
    Réponses: 3
    Dernier message: 09/01/2008, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo