Java

interface OneOrNone<T> {
  <A> A visit(OneOrNoneVisitor<A> v);
}

class One<T> implements OneOrNone<T> {
  private T t;
  One(T t) { this.t = t; }
  T one() { return t; }
  public <A> A visit(OneOrNoneVisitor<A> v) { return v.visit(this); }        
}

class None<T> implements OneOrNone<T> {
  public <A> A visit(OneOrNoneVisitor<A> v) { return v.visit(this); }
}

interface OneOrNoneVisitor<A> {
  <T> A visit(One<T> o);
  <T> A visit(None<T> n);
}