Implements de java + visiteurs
katim
-
katim -
katim -
Bonjour,
Bonjour,
j'aimerais savoir comment utiliser implements avec les design petterns des visiteurs. voila la signification des visiteurs:
interface Exp.Visitor <R,A>: collection of methods for
* visiting trees of type Exp
* returning a value of type R
* using an extra argument of type A
R accept(Exp.Visitor<R,A> v, A arg): a method for using a visitor and returning a value .
un exemple;
public abstract class Exp implements java.io.Serializable {
public abstract <R,A> R accept(Exp.Visitor<R,A> v, A arg);
public interface Visitor <R,A> {
public R visit(Calc.Absyn.EAdd p, A arg);
public R visit(Calc.Absyn.ESub p, A arg);
public R visit(Calc.Absyn.EMul p, A arg);
public R visit(Calc.Absyn.EDiv p, A arg);
public R visit(Calc.Absyn.EInt p, A arg);
}
}
public class EAdd extends Exp {
public final Exp exp_1, exp_2;
public EAdd(Exp p1, Exp p2) { exp_1 = p1; exp_2 = p2; }
public <R,A> R accept(Calc.Absyn.Exp.Visitor<R,A> v, A arg)
{
return v.visit(this, arg);
}
**mon probleme est avec le R (le type retourné), j'aimerais retourner plusieurs types (integer, boolean,..) et non pas un seul (voir l'exemple ci-dessous).
private static class Calculator implements Exp.Visitor<Integer,Object> {
public Integer visit(Calc.Absyn.EAdd p,Object o)
{
Integer a = p.exp_1.accept(this, null);
Integer b = p.exp_2.accept(this, null);
return a + b;
}
si je veux avoir une autre class par exp: public Boolean visit (Calc.Absyn.Eequ p,Object o) , j'aurais un pb avec le type (Boolean) .
Merci beaucoup.
Bonjour,
j'aimerais savoir comment utiliser implements avec les design petterns des visiteurs. voila la signification des visiteurs:
interface Exp.Visitor <R,A>: collection of methods for
* visiting trees of type Exp
* returning a value of type R
* using an extra argument of type A
R accept(Exp.Visitor<R,A> v, A arg): a method for using a visitor and returning a value .
un exemple;
public abstract class Exp implements java.io.Serializable {
public abstract <R,A> R accept(Exp.Visitor<R,A> v, A arg);
public interface Visitor <R,A> {
public R visit(Calc.Absyn.EAdd p, A arg);
public R visit(Calc.Absyn.ESub p, A arg);
public R visit(Calc.Absyn.EMul p, A arg);
public R visit(Calc.Absyn.EDiv p, A arg);
public R visit(Calc.Absyn.EInt p, A arg);
}
}
public class EAdd extends Exp {
public final Exp exp_1, exp_2;
public EAdd(Exp p1, Exp p2) { exp_1 = p1; exp_2 = p2; }
public <R,A> R accept(Calc.Absyn.Exp.Visitor<R,A> v, A arg)
{
return v.visit(this, arg);
}
**mon probleme est avec le R (le type retourné), j'aimerais retourner plusieurs types (integer, boolean,..) et non pas un seul (voir l'exemple ci-dessous).
private static class Calculator implements Exp.Visitor<Integer,Object> {
public Integer visit(Calc.Absyn.EAdd p,Object o)
{
Integer a = p.exp_1.accept(this, null);
Integer b = p.exp_2.accept(this, null);
return a + b;
}
si je veux avoir une autre class par exp: public Boolean visit (Calc.Absyn.Eequ p,Object o) , j'aurais un pb avec le type (Boolean) .
Merci beaucoup.
A voir également:
- Implements de java + visiteurs
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
en java tu peux surcharger les methodes que tu appelles comme ceci (c'est un exemple simple):
donc si tu veux retourner un boolean normalement tu peux faire:
int somme( int p1, int p2){ return (p1 + p2); } float somme( float p1, float p2){ return (p1 + p2); } float somme( float p1, float p2, float p3){ return (p1 + p2 + p3); } int somme( float p1, int p2){ return (int(p1) + p2); }
donc si tu veux retourner un boolean normalement tu peux faire:
public bool visit(Calc.Absyn.EAdd p,Object o) { //ton code return true; }
Je m'excuse pour le retard.
mon probleme est avec le type retourné par le visiteur.
Par exemple si j'ai un neoud exp qui a des sous nœuds qui retournent comme type (int , et float par exemple) et j'ai un visiteur v qui visite exp ( et automatiquement les deux sous nouends), donc quel est le type retourné par ce visiteur???
Merci.