在重写Java方法时使用子类型参数

时间:2018-06-17 01:31:11

标签: java type-inference

我正在考虑写一个sudo apt upgrade && sudo apt install pkg-config "类型类"在Java中。例如,

Monoid

但是,如果您希望自己的interface Monoid<A> { Monoid<A> mappend(Monoid<A> ma); } 成为List。您不能Monoid overridemappend。问题是参数应该是反变量的。一种残酷的力量方式是将List<A> mapppend(List<A> la);声明如下:

mappend

经过一段时间的实验,我想到了以下几点:

Function<? extends Monoid<A>, ? extends Monoid<A>> mappend();

但它不是一般解决方案(可能是interface X<A, Y extends X<?,?>> { Y f(Y y); } interface Z<A> extends X<A,Z<A>> { @Override Z<A> f(Z<A> za); } Applicative):

Monad

interface X<A, Y extends X<?,?>> { Y f(Y y); <B> Y g(Function<A,Y> ay); } interface Z<A> extends X<A,Z<?>> { @Override Z<A> f(Z<?> za); @Override <B> Z<B> g(Function<A, Z<?>> ay); } 是我能为@Override <B> Z<B> g(Function<A, Z<?>> ay);做的最好的事情。

有没有办法获得bind

0 个答案:

没有答案