【发布时间】:2020-05-15 12:19:33
【问题描述】:
我在 kotlin 中有以下接口,不可修改,因为它是在第三方库中定义的。我想使用子类的类型参数覆盖泛型方法:
interface Factory {
fun <T> create(modelClass: Class<T>): T
}
// The naive solution doesn't compile : "Class is not abstract and does not implement abstract member":
class ConcreteFactory1 <T> (val creator: () -> T) : Factory {
override fun create(modelClass: Class<T>): T {
return creator()
}
}
// If we introduce a second type parameter, it compiles, but generates a "Unchecked Cast" warning:
class ConcreteFactory2 <T> (val creator: () -> T) : Factory {
override fun <T2> create(modelClass: Class<T2>): T2 {
return creator() as T2
}
}
有没有办法在没有编译警告的情况下实现这一点?
【问题讨论】: