从接口有方法实现,但覆盖泛型类型

时间:2015-12-15 23:24:36

标签: java generics interface

我有一个如下界面:

public interface Functor<T> {
    public <R> Functor<R> chain(Function<T, Functor<R>> f);
}

我希望实现:

public abstract class Either<T> implements Functor<T> {
    private static class Right<T> extends Either<T> {
        private T val;

        private Right(final T val) {
            this.val = val;
        }

        public <R> Either<R> chain (final Function<T, Either<R>> f) {
            return f.apply(this.val);
        }
    }
}

原因是我希望能够&#34;链&#34;超过任何Functor<T>但我希望这些仿函数要求与链返回的类型相同。

我能够让这个工作的唯一方法是:

public interface Functor<T> {
    public <R> Functor<R> chain(Function<T, ? extends Functor<R>> f);
}

public abstract class Either<T> implements Functor<T> {
    public static class Right<T> extends Either<T> {
        private T val;

        private Right(final T val) {
            this.val = val;
        }

        public <R> Either<R> chain(final Function<T, ? extends Functor<R>> f) {
            return (Either<R>)f.apply(this.val);
        }
    }
}

然而,这并不能完全表达我想要的......转换为(Either<R>)的类型并不是解决此问题的最佳方式。

任何将? extends Either<R>Either<R>放置的尝试都失败了&#34;右边不是抽象的,也不会覆盖抽象方法&lt; R&gt;链...&#34;

任何人都知道我能做些什么来解决这个问题? 有没有办法做到这一点?

0 个答案:

没有答案