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
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
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.