Récupération et invocation dynamique des méthodes d'une classe [reflection]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 780 fois - Téléchargée 30 fois

Contenu du snippet

suite à une question, je propose le petit bout de code suivant qui doit être étendu et rendu robuste (gestion d'Exception et traitement des méthodes à params...)
la question était :
http://www.javafr.com/forum.aspx?Article=1412

Source / Exemple :


import java.lang.reflect.*;
public class Chat {

  public Chat() {
  }
  public void miaule(){System.out.println("maou");}
  public void bois(){System.out.println("lap...lap...");}
  public static void main(String[] args) throws Exception
  {
  Chat chat = new Chat();
  //Récupérer l'objet Class
  Class c = chat.getClass();
  //Récupérer les Ctors
  Constructor[] ctors =  c.getConstructors();
  for (int i=0; i<ctors.length; i++)
  System.out.println(ctors[i]);

  //Récupérer les méthodes...
  Method[] methodes = c.getDeclaredMethods();
  for (int i=0; i<methodes.length; i++)
  {
  System.out.println(methodes[i]);
  if(methodes[i].getParameterTypes().length==0)
  //... et les invoquer
  methodes[i].invoke(chat,null);
  }

  }
}

A voir également

Ajouter un commentaire Commentaire
alexis779 Messages postés 13 Date d'inscription dimanche 21 novembre 2004 Statut Membre Dernière intervention 15 octobre 2005
27 févr. 2005 à 23:22
Il faut mettre un c majuscule à "class" dans la ligne :
class c = chat.getClass();
->
Class c = chat.getClass() ;

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.