java - 覆盖 Java 方法时使用子类型参数
问题描述
我正在考虑Monoid
用 Java 编写一个“类型类”。例如,
interface Monoid<A> {
Monoid<A> mappend(Monoid<A> ma);
}
但是,如果您希望自己List
成为Monoid
. 你不能to override
。问题是参数应该是逆变的。一种残酷的强制方式是声明如下:mappend
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
。
有没有办法得到一个@Override <B> Z<B> g(Function<A, Z<B>> ay);
?
解决方案
推荐阅读
- spring-integration-http - HTTP 出站网关 - 依赖于消息的 RestTemplate
- php - 从 PHP PDO 应用引擎到 Cloud SQL 的连接缓慢
- android - 为 Imageview 请求 RecyclerViewAdapter.notifyItemChanged 的示例
- ffi - 如何使用 Elmish 和 Fable 将参数从 html 页面传递到编译的 js 应用程序
- c# - 当状态码设置为 .net core 2.1 时,授权过滤器继续开启
- symfony - Symfony 上按 ID 列出的两个不同表的列表
- android-workmanager - WorkManager 自定义约束
- angular - 将服务中的布尔值链接到多个组件
- java - How to add tags when saving an object in an Algolia index using the Java API
- async-await - 运行 .sendKeys 后量角器挂起