【发布时间】:2018-02-16 15:46:36
【问题描述】:
我无法继承包含基类型的方法/乐趣的接口,我想在实现它的类中将其重写为子类型。
到目前为止我有界面
interface IModel {
fun convert(dataModel: BaseDataModel)
}
以及实现它的类:
class SettingsModel: IModel {
override fun convert(dataModel: BaseDataModel) {
// Conversion of models here
}
}
我也有 SettingsDataModel,它是:
class SettingsDataModel: BaseDataModel() {
}
我想要实现的是每个实现 IModel 的类/模型,能够获得特定的 DataModel,例如:
class SettingsModel: IModel {
override fun convert(dataModel: SettingsDataModel) {
// Conversion of models here
}
}
无需强制转换。我想我不能,因为它修改了乐趣的签名,使其不是真正的覆盖。我尝试使用泛型和generic constraints,但没有运气:
interface IModel {
fun <T :BaseDataModel>convert(dataModel: T)
}
但它不起作用。有什么解决方法吗?
【问题讨论】:
-
旁注:你不能限制函数参数(因为使用接口实现的人不能使用它)但你可以更具体地说明你的返回类型(例如:在接口返回是
Any但你可以在 impl 中做Int)
标签: generics inheritance kotlin kotlin-generics