samples/visitor/11-cleanversion/src-api1.0/org/apidesign/visitor/Language.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 22:59:00 +0200
changeset 266 47d5f1fe0b03
parent 170 206cdfeefeec
child 327 d7344ad9310d
permissions -rw-r--r--
The final book text is using VisitorXY instead of original VisitorX_Y
     1 package org.apidesign.visitor;
     2 
     3 public final class Language {
     4     private Language() { }
     5     
     6     public static abstract class Expression {
     7         Expression() {}
     8         public abstract void visit(Visitor v);
     9     }
    10     public static final class Plus extends Expression {
    11         private final Expression first;
    12         private final Expression second;
    13         
    14         public Plus(Expression first, Expression second) {
    15             this.first = first;
    16             this.second = second;
    17         }
    18         public Expression getFirst() { return first; }
    19         public Expression getSecond() { return second; }
    20         @Override
    21         public void visit(Visitor v) { 
    22             if (v instanceof Visitor10) {
    23                 ((Visitor10)v).visitPlus(this);
    24             } else {
    25                 v.visitUnknown(this);
    26             }
    27         }
    28     }
    29     public static final class Number extends Expression {
    30         private final int value;
    31         public Number(int value) { this.value = value; }
    32         public int getValue() { return value; }
    33         @Override
    34         public void visit(Visitor v) { 
    35             if (v instanceof Visitor10) {
    36                 ((Visitor10)v).visitNumber(this);
    37             } else {
    38                 v.visitUnknown(this);
    39             }
    40         }
    41     }
    42 
    43     public interface Visitor {
    44         public void visitUnknown(Expression e);
    45     }
    46     
    47     public interface Visitor10 extends Visitor {
    48         public void visitPlus(Plus s);
    49         public void visitNumber(Number n);
    50     }
    51 }