Implements de java + visiteurs

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.

1 réponse

  1. neofenix Messages postés 145 Statut Membre 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;
    } 
    -1
    1. katim
       
      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.
      0