All Packages Class Hierarchy This Package Previous Next Index
java.lang.Object | +----PPrados.MethodeRef
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 :
Class.forName() permet de retrouver la functor.
newInstance() permet de construire une instance de la
functor.
MethodeRef sont utilisées pour communiquer.
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.
public static MethodeRefParam param_
public static Semaphore sema_
public MethodeRef(String ref)
null indique l'absence de référence.
public void set(String ref)
public Object perform(Object obj,
Object param) throws MethodeRefBadException, Exception
public Object perform(Object obj) throws MethodeRefBadException, Throwable
public Object perform() throws MethodeRefBadException, Throwable
public boolean equals(Object obj)
public Object clone()
public String toString()
All Packages Class Hierarchy This Package Previous Next Index