So we use the visitor as follows:
class Main { public static void main(String[] args) { System.out.println(s(new One<Integer>(7))); System.out.println(s(new One<String>("hello"))); System.out.println(s(new None<Integer>())); } static <X> String s(OneOrNone<X> o) { return o.visit(new OneOrNoneVisitor<String>() { public <T> String visit(One<T> o) { return "got one! " + o.one(); } public <T> String visit(None<T> n) { return "don't got one"; } }); } }