Java class en parametre

Résolu/Fermé
bilbokey Messages postés 114 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 14 avril 2014 - 16 août 2010 à 18:00
 FabriceF - 18 août 2010 à 17:08
Bonjour,

J' ai une Interface java "Animaux" implémenté par plusieurs classes "DefaultAnnimal" et "Poisson rouge" par exemple. Et dans une autre classe java, j'ai une chaine de caractère. Si c'est "Poisson rouge", j'aimerais avoir accès juste aux méthode de la classe "Poisson rouge" et sinon, aux méthode de "DefaultAnnimal". Cependant je ne sais pas comment faire. Si vous avez des idée, merci de me les faire partager.

Merci de votre attention.


A voir également:

7 réponses

bilbokey Messages postés 114 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 14 avril 2014 11
Modifié par bilbokey le 18/08/2010 à 15:42
oui mon appli est réservé aux développeurs. Le principe est de pouvoir faceilement ajouter des plugins.
Alors si sa interesse quelqu'un j'ai trouvé en utilisant les classes Method et Class (pour recuperer la clsse a partir de la méthode) :
Class c= Class.forName(NomDeLaClasse); 
Class[] parameter ={TypeParametreDeMaMethode1.class,TypeParametreDeMaMethode2.class...}; 
Method m=c.getMethode(NomDeLaMethode,parameter); 
Object ob={MonParam1,MonParam2...} 
m.invoke(c.newInstance(),ob); 

Et il exécute donc la méthode dont le nom NomDeLaMethode était contenu dans une chaine de caractères, et la classe NomDeLaClasse également.
Merci quand même d'avoir essayer de m'aider Hell_Keeper et FabriceF.

Merci du temps que vous m'avez accorder.
J'ai manqué d'un peu de clareté dans mon explication. J'espere que vous avez mieu compris avec cette dernière explication.
1
Hell_Keeper Messages postés 139 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 2 septembre 2010 36
16 août 2010 à 20:55
Salut, utilise le polymorphisme ;) ...

par exemple dans la classe qui contient la chaine ajoute un attribut

private Animal toto=null;

apres il suffit de tester ta chaine :

if (chaine.equals("PoissonRouge")){
toto=new PoissonRouge(...);
}

Je pense que tu veux faire qqch dans ce genre là. Toutes les méthodes de ta classe PoissonRouge seront utilisées (je parle des méthodes redéfinies [Si ta classe PoissonRouge hérite d'une autre classe implémentant Animal])
0
bilbokey Messages postés 114 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 14 avril 2014 11
17 août 2010 à 09:04
ok merci, je garde cela dans un coin de ma tête, mais en fait mon principal problème est que la méthode poisson rouge n'existe pas.
En fait l'utilisateur qui veut faire fonctionner mon appli, implémente une méthode "PoissonRouge" et après moi j'ai juste cette chaine en paramètre du coup je voudrais faire un new LaChaineDeCaractereRepresentantLeNomDeLaMethode()...
Je sais pas si je suis assez clair
0
bilbokey Messages postés 114 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 14 avril 2014 11
17 août 2010 à 09:13
En fait je cherche comment faire pour qu'une variable contienne le nom d'une méthode plutôt.... et pouvoir exécuter cette méthode...
Merci de votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hell_Keeper Messages postés 139 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 2 septembre 2010 36
18 août 2010 à 11:17
Je pense comprendre ce que tu veux dire, mais je ne vois pas l'intérêt. Ton application est donc réservé au développeur (tout le monde ne sais aps écrire du code)? Car ce n'est pas une méthode PoissonRouge mais un constructeur et si tu as écrit tes classes, ta classe PoissonRouge possède au minimum ce constructeur (que tu l'as écrit ou non).
0
Bonjour j'ai pas trop compris ce que t'as écrit mais voilà je te propose d'écrire ta méthode dans l'autre class d'écrire ceci:

public String chaine(Animal animal){
          if(Animal instanceof DefaultaAnimal){
                      DefaultAnimal defaultAnimal=(DefaultAnimal)animal;
                      return defaultAnimal.getTaMethode();
          }
          if(Animal instanceof PoissonRouge){
                      PoissonRouge poissonRouge=(PoissonRouge)animal;
                      return poissonRouge.getTaMethode();
          }
          return null;
}


Dans ce cas il faut que la méthode getTaMethode() soit une méthode qui renvoie un String elle peux ne pas être une méthode abstraite de ton Interface Animal.
0
Oui mais dans ce cas ton message n'était pas explicite.
-1