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);
    }
}

なんとなく違和感がある。本質が理解しきれてないんだろうか……。