All Packages  Class Hierarchy  This Package  Previous  Next  Index

Class PPrados.MethodeRef

java.lang.Object
   |
   +----PPrados.MethodeRef

public class MethodeRef
extends Object
implements Cloneable
Permet d'avoir une référence sur une méthode d'un objet. La référence est stockée dans un objet MethodeRef. Il faut auparavant construire une classe technique permettant d'appeler la méthode candidate à une référence. Cette classe technique doit appeler dans son constructeur la méthode référencé. C'est le nom de cette classe technique qui sera utilisé dans un objet MethodeRef. Il faut une classe technique pour toutes les méthodes candidates à une référence. Une classe technique s'occupant uniquement d'appeler une methode dans son constructeur est appelée functor en terminologie C++.

Exemple :

   public class Obj
   { Object methode(Object) { return null;}
   }
   // functor appelant methode d'un objet Obj.
   public class Obj_methode extends PPrados.MethodeRefLink
   { 
     public Obj_methode()   throws Throwable
     { }
     Object link(Object obj,Object param) throws Throwable
     { return ((Obj)obj).methode(param);
     }
   }
   ...
   // Exemple d'utilisation d'une référence sur la méthode 'Obj.methode'
   Obj o=new Obj()
   // Creation d'une référence via 'Obj_methode'
   RefMethode ref=new RefMethode("Obj.methode");
   // Appel de la méthode référencé par 'ref' pour l'objet 'o'
   ref.perform(o,null); 
 
Les functors doivent être écrites sur le même shéma que la classe Obj_methode. Les éléments en gras doivent être remplacé par le nom de la classe et le nom de la méthode pouvant être référencés.

Il est également possible d'avoir une référence sur une méthode statique.

 public class Obj
 { static Object methode(Object) { return null);
 }
 ...
 ref.set("Obj.methode");
 ref.perform(null,null); // Appel de la méthode statique
 
Pour cela, le premier paramètre de la méthode perform doit être à null.

Le principe de fonctionnement est le suivant :

Il est à noter que si une exception est générée par la méthode appelée via une référence, le compilateur ne le sait pas lors de la compilation. Il n'indique pas qu'une exception doit être capturée !

Exemple :

 public class Obj
 { public Object methode(Object o) throws MyException
   { throw new MyException(); }
 }
 ... Ajout de la functor
 // Exemple d'application
 public void main(String argv)
 { Obj o=new Obj()
   // Creation d'une référence sur 'Obj.methode'
   RefMethode ref=new RefMethode("Obj.methode");
   // Appel de la méthode référencé par 'ref' pour l'objet 'o'
   ref.perform(o,null); 
 }
 
Le compilateur ne signale pas que l'exception MyException n'est pas capturé par main, ce qui serait le cas si l'appel de methode() était fait directement à partir de l'objet o (o.methode()).

MethodeRef est compatible avec le multi-taches et avec la version 1.0.2 du JDK.


Variable Index

 o param_
Les paramétres statiques pour communiquer avec les functors.
 o sema_
Un semaphore pour gérer l'acces aux paramètres.

Constructor Index

 o MethodeRef(String)
Initialise la valeur de la référence.

Method Index

 o clone()
Crée une copie de la référence
 o equals(Object)
Compare deux références
 o perform()
Appel de la méthode statique référencée.
 o perform(Object)
Appel de la méthode référencée sans paramètre.
 o perform(Object, Object)
Appel de la méthode référencée en lui fournissant un paramètre.
 o set(String)
Modifie la référence.
 o toString()
Convertit la référence en chaine de caractères

Variables

 o param_
  public static MethodeRefParam param_
Les paramétres statiques pour communiquer avec les functors.

 o sema_
  public static Semaphore sema_
Un semaphore pour gérer l'acces aux paramètres.

Constructors

 o MethodeRef
  public MethodeRef(String ref)
Initialise la valeur de la référence. Le format doit être : class.methode. La valeur null indique l'absence de référence.

Parameters:
ref - Le nom de la classe appelant la méthode.

Methods

 o set
  public void set(String ref)
Modifie la référence.

Parameters:
ref - Le nom de la classe appelant la méthode.
 o perform
  public Object perform(Object obj,
                        Object param) throws MethodeRefBadException, Exception
Appel de la méthode référencée en lui fournissant un paramètre.

Parameters:
obj - L'objet devant executée la méthode référencée. S'il est null, appel d'une méthode statique.
param - L'objet paramètre reçu par la méthode référencée
Returns:
L'objet retourné par la méthode référencée
Throws: MethodeRefBadException
quand la référence est invalide.
 o perform
  public Object perform(Object obj) throws MethodeRefBadException, Throwable
Appel de la méthode référencée sans paramètre.

Parameters:
obj - L'objet devant executée la méthode référencée S'il est null, appel d'une méthode statique.
Returns:
L'objet retourné par la méthode référencée
Throws: MethodeRefBadException
quand la référence est invalide.
 o perform
  public Object perform() throws MethodeRefBadException, Throwable
Appel de la méthode statique référencée.

Returns:
L'objet retourné par la méthode référencée
Throws: MethodeRefBadException
quand la référence est invalide.
 o equals
  public boolean equals(Object obj)
Compare deux références

Overrides:
equals in class Object
 o clone
  public Object clone()
Crée une copie de la référence

Overrides:
clone in class Object
 o toString
  public String toString()
Convertit la référence en chaine de caractères

Overrides:
toString in class Object

All Packages  Class Hierarchy  This Package  Previous  Next  Index