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 :

[Introspection] Appel méthode d'une interface


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Par défaut [Introspection] Appel méthode d'une interface
    Bonjour,
    Je veux faire l'introspection et appeler une méthode d'une interface.
    J'ai exploré les autres posts et tuto sur l'introspection.
    Mon problème est le suivant :
    je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // nomInterface et une interface et non une classe
    Class c = Class.forName("nomInterface");
    J'aimerai appeler la méthode methode1() de cette interface. Je ne sais comment le faire car :
    1. On ne peut pas instancier l'interface comme dans le cas d'une classe. Une tentative de cette opération c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object o = c.newInstance();
    en vue de faire un invoke()
    crée une exception InstanciationException.
    2. On ne peut pas faire un invoke() directement sur c car il n'est pas un Object. Une tentative de cette opération c'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Method m = c.getMethod("methode1", null);
    Object o = m.invoke(c);
    crée une exception IllegalArgumentException:object is not an instance of declaring class
    J'aimerai donc savoir
    1. Comment appeler une méthode à travers une interface ?
    ou
    2. comment (par introspectuon) obtenir la classe qui implémente une interface afin d'appeler directment la méthode sur l'instance de cette classe.

    Merci si quelqu'un a une idée.

  2. #2
    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
    Par défaut
    Tu ne connais pas l'interface autrement que par son nom?

    2. comment (par introspectuon) obtenir la classe qui implémente une interface afin d'appeler directment la méthode sur l'instance de cette classe.
    Il peut y avoir une infinité de classe qui implémente une interface... Prend l'exemple de l'interface Comparable, y'a plein d'objets comparables, les String, les Integer...
    Où se trouve la méthode que tu veux appeler (car dans une interface il n'y a pas de code)?

    De manière plus générale, quel est le problème que tu veux résoudre? Es-tu sûr que l'introspection soit une solution adéquate?

  3. #3
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Par défaut
    Bonjour et merci pour ta réponse,
    Oui je sais qu'une interface peut être implémentée par plusieurs classes.
    Y' a-t-il moyen (par introspection) d'obtenir l'ensemble des classes qui implémentent une interface ?
    En fait, mon problème est le suivant :
    J'ai le nom de mon interface et dans mon cas, une seule classe implémente cette interface.
    Où se trouve la méthode que tu veux appeler (car dans une interface il n'y a pas de code)?
    Elle se trouve dans la classe qui implémente mon interface.

    Merci

  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
    Par défaut
    Tu le récupères d'où le nom de ton interface?

  5. #5
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Par défaut
    J'ai une classe MonInterface qui a un champ String donnant le nom de mon interface.
    Quand j'instancie cette classe, j'initialise l'instance avec le nom de mon interface.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MonInterface {
       String nomInterface;
       public MonInterface(String nom) {
          nomInterface = nom;
      }
    }
    Dans la classe contenant le main()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // l'interface de nom "nomInterface existe dans le Classpath et il existe 
    //aussi une classe qui implémente cette interface.
    MonInterface i = new MonInterface("nomInterface");
    String nom = i.getNomInterface(); 
    Class c = Class.forName(nom)
    // Les problèmes commencent ici car je veux appeler une méthode de l'interface nomInterface
    Merci

  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
    Par défaut
    Et pourquoi tu donnes l'interface sous forme de String? Pourquoi tu ne donnes pas directement une instance de la classe que tu veux utiliser...? dans un attribut de type le type de l'interface...

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par zsoh Voir le message
    Oui je sais qu'une interface peut être implémentée par plusieurs classes.
    Y' a-t-il moyen (par introspection) d'obtenir l'ensemble des classes qui implémentent une interface ?
    Non.
    Et d'ailleurs, le resultat serait probablement faux (ou variable dans le temps si tu préfères), puisque les classes ne sont pas forcement chargées si elles ne sont pas utilisées.

Discussions similaires

  1. Appel méthode dans une classe Bean
    Par maserati dans le forum Général Java
    Réponses: 2
    Dernier message: 28/12/2011, 15h14
  2. Appeler méthode d'une Activity parente
    Par snyfir dans le forum Android
    Réponses: 6
    Dernier message: 09/05/2011, 09h54
  3. introspection des attributs d'une interface
    Par al3alwa dans le forum Langage
    Réponses: 7
    Dernier message: 02/07/2008, 18h32
  4. Réponses: 6
    Dernier message: 29/04/2008, 09h34
  5. appel méthode d'une dll
    Par spilmann dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 14/02/2007, 11h47

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