Implements de java + visiteurs

[Fermé]
Signaler
-
 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.

1 réponse

Messages postés
145
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
11 mars 2010
2
en java tu peux surcharger les methodes que tu appelles comme ceci (c'est un exemple simple):
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;
} 
Bonjour,

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.