【发布时间】:2018-10-10 03:01:12
【问题描述】:
为简单起见,我有这两个类:
abstract class ClassA<T> where T : ClassA<T> {
fun fooA(): T {
//Do stuff
return this as T //<-- Cast warning happens here
}
}
open class ClassB : ClassA<ClassB>() {
fun fooB(): ClassB {
//Do stuff
return this
}
}
我在 fooA 函数中标记的那一行被 IntelliJ 标记为以下警告:
"Unchecked cast: ClassA<T> to T"。除非我遗漏了什么,否则我设置类的方式应该使函数 fooA 中的返回类型不可能不是 ClassA 的子级,这意味着强制转换检查将是多余的。或者至少我看不到 fooA 可以尝试将 ClassA 强制转换为不是它的子对象的方式。我是否遗漏了什么,或者我可以取消警告?
【问题讨论】:
-
好问题。这显示了 Java(以及 Kotlin)类型系统的弱点。
typeclass解决了这个问题。
标签: generics inheritance casting kotlin warnings