nsL*_*nsL 5 generics inheritance kotlin kotlin-generics
我在继承包含基类型的方法/乐趣的接口时遇到问题,我想将其重写为实现它的类中的子类型。
到目前为止我已经有了界面
interface IModel {
fun convert(dataModel: BaseDataModel)
}
Run Code Online (Sandbox Code Playgroud)
以及实现它的类:
class SettingsModel: IModel {
override fun convert(dataModel: BaseDataModel) {
// Conversion of models here
}
}
Run Code Online (Sandbox Code Playgroud)
我还有 SettingsDataModel 它是:
class SettingsDataModel: BaseDataModel() {
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是对于每个实现 IModel 的类/模型,能够获取特定的 DataModel,例如:
class SettingsModel: IModel {
override fun convert(dataModel: SettingsDataModel) {
// Conversion of models here
}
}
Run Code Online (Sandbox Code Playgroud)
无需投射它。我想我不能,因为它修改了乐趣的签名,使其不是真正的覆盖。我尝试使用泛型和泛型约束,但没有运气:
interface IModel {
fun <T :BaseDataModel>convert(dataModel: T)
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。有解决这个问题的方法吗?
这个怎么样?
interface IModel<T : BaseDataModel> {
fun convert(dataModel: T)
}
class SettingsModel: IModel<SettingsDataModel> {
override fun convert(dataModel: SettingsDataModel) {
// Conversion of models here
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4204 次 |
最近记录: |