1 package org.apidesign.visitor;
3 public final class Language {
6 public static abstract class Expression {
8 public abstract void visit(Visitor v);
10 public static final class Plus extends Expression {
11 private final Expression first;
12 private final Expression second;
14 public Plus(Expression first, Expression second) {
18 public Expression getFirst() { return first; }
19 public Expression getSecond() { return second; }
21 public void visit(Visitor v) {
22 if (v instanceof Visitor10) {
23 ((Visitor10)v).visitPlus(this);
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; }
34 public void visit(Visitor v) {
35 if (v instanceof Visitor10) {
36 ((Visitor10)v).visitNumber(this);
43 public interface Visitor {
44 public void visitUnknown(Expression e);
47 public interface Visitor10 extends Visitor {
48 public void visitPlus(Plus s);
49 public void visitNumber(Number n);