Java - 使用有界类型参数替换实现类型的接口类型

时间:2017-12-27 03:21:40

标签: java generics interface bounded-types f-bounded-polymorphism

我试图用Haskell学习函数式编程,但我很难理解一些概念。我认为将这些概念翻译成Java是个好主意,因为它是我觉得最舒服的语言。

我有以下界面Applicative<A>

public interface Applicative<A>
{
    public <B> Applicative<B> pure (B value);

    public <B> Applicative<B> apply (Applicative<Function<A, B>> applicative);

    public <B, C> Function<Applicative<B>, Applicative<C>> liftA2 (
        Function<A, Function<B, C>> function);
}

我们说我有接口ListApplicative<A>的实现。它扩展了ArrayList<A>,并实现了Applicative<A>

问题是:如何将所有Applicative<?>变为ListApplicative<?>?它甚至可能吗?有什么黑客可以做到吗?

public class ListApplicative<A> extends ArrayList<A> implements Applicative<A>
{
    @Override
    public <B> ListApplicative<B> pure (B value)
    {
        // Implementation
    }

    @Override
    public <B> ListApplicative<B> apply (
        ListApplicative<Function<A, B>> applicative)
    {
        // Implementation
    }

    @Override
    public <B, C> Function<ListApplicative<B>, ListApplicative<C>> liftA2 (
        Function<A, Function<B, C>> function)
    {
        // Implementation
    }
}

我已经读过一些关于F-bound类型的内容,但我不知道该怎么做。我无法使用BC作为参数化类型,因为在您运行该函数之前,它们的类型是未知的。

我已查看其他类似问题,例如this one about functorsthis one about generics of genericsthis one about interfaces,但我找不到我要找的答案。

非常感谢!

0 个答案:

没有答案