Kotlin:覆盖子类型内的通用属性 [英] Kotlin: override generic property within subtype

查看:325
本文介绍了Kotlin:覆盖子类型内的通用属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图编写一些泛型代码,但无法删除PROPERTY类型不是重写属性的子类型错误。



我的代码的简化版本:

 抽象类BaseP< V> ; {
var view:V? = null
}

抽象类BaseF {
fun smth(){
pp.view = this
}
抽象val pp: BaseP< BaseF>
}

抽象类SubF:BaseF(){$​​ b $ b抽象覆盖val pp:BaseP< SubF>
//错误:(20,30)'pp'的类型不是重写属性的子类型'public abstract val pp:BaseP< BaseF>在BaseF中定义'
}

我发现错误可能是 @Suppress -ed,但我怀疑这是最好的和唯一的方法。有什么更好的?



毕竟我不明白,为什么 subtypeA< subtypeB> 不计数为 baseA< baseB> 的子类型,有人可以解释这个吗? 首先, SubtypeA BaseA 的子类型,所以问题出在泛型参数子类型。



答案在于 Kotlin泛型差异,类似于 Java的。为什么不把 SubtypeA< SubtypeB> 计为 BaseA< BaseB> ?


默认情况下,泛型不变,这意味着即使更简单情况下,对于一个类 A< T> A< SubtypeB> 和<$中有变量修饰符的指定,否则c <和 A< BaseB> 不是彼此的子类型。 c $ c> out (或 Java通配符

可能有两种情况:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆