samples/visitor/11-cleanversion/src-api1.0/org/apidesign/visitor/Language.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:58:52 +0200
changeset 169 3be14291c9f8
child 170 206cdfeefeec
permissions -rw-r--r--
Clean definition of the version using interfaces
     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) { v.visitPlus(this); }
    22     }
    23     public static final class Number extends Expression {
    24         private final int value;
    25         public Number(int value) { this.value = value; }
    26         public int getValue() { return value; }
    27         @Override
    28         public void visit(Visitor v) { v.visitNumber(this); }
    29     }
    30 
    31     public interface Visitor {
    32         public void visitUnknown(Expression e);
    33         public void visitPlus(Plus s);
    34         public void visitNumber(Number n);
    35     }
    36 }