java - 如何使 Java 上限通配符类型参数符合 Kotlin?
问题描述
给定
public interface StubTransformer {
AbstractStub<?> transform(String name, AbstractStub<?> stub);
}
和
public static <T extends AbstractStub<T>> T attachHeaders(T stub, Metadata extraHeaders) {...}
这个 Kotlin 类无法编译。
class MetadataInjectingStubTransformer: StubTransformer {
override fun transform(name: String, stub: AbstractStub<*>): AbstractStub<*> {
val header = Metadata()
return MetadataUtils.attachHeaders(stub, header)
}
}
错误
Type parameter bound for T in
fun <T : AbstractStub<T!>!> attachHeaders(stub: T!, extraHeaders: Metadata!): T!
is not satisfied: inferred type AbstractStub<*>! is not a subtype of AbstractStub<AbstractStub<*>!>!
但是Java版本可以强制编译。
public class MetadataInjectingStubTransformer implements StubTransformer {
@Override
@SuppressWarnings("unchecked")
public AbstractStub<?> transform(String name, AbstractStub stub) {
Metadata header = new Metadata();
return MetadataUtils.attachHeaders(stub, header);
}
}
我们如何使 Kotlin 代码编译?
解决方案
推荐阅读
- angular - Angular 通用 ng 生成通用 --clientProject
- python-2.7 - os.path.isdir() 总是给真
- java - 记忆游戏java gui
- c++ - 如何从原始指针中获取 shared_ptr?
- javascript - 上传图片,无法读取未定义的属性“订阅”
- laravel - laravel 5 show 正在返回空查询并且不显示任何数据
- java - java DateTimeFormatterBuilder 在测试时间失败
- regex - 如何一次 grep 两种模式并将结果放在一个字符串中?
- java - 选择特定工作区时,Eclipse 在后台运行
- r - 使用 r 在同一图表上绘制月度和年度数据