Maybe Java
interface Function<T, R> { public R eval(T arg); } class Maybe<T> { public static final Maybe<?> NOTHING = new Maybe<Object>(null); private final T value; private Maybe<T>(T value) { this.value = value; } @SuppressWarnings("unchecked") public <R> R exec(Function<T, R> func) { if (value == null) return (Maybe<R>) NOTHING; else return func.eval(value); } public static <T> Maybe<T> maybe(T value) { return new Maybe<T>(value); } }
なんとなく違和感がある。本質が理解しきれてないんだろうか……。