我在继承包含基本类型的方法/乐趣的接口(interface)时遇到麻烦,我想在实现它的类中将其重写为子类型。

到目前为止,我有界面

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)
}

但它不起作用。有什么解决办法吗?

最佳答案

这个怎么样?

interface IModel<T : BaseDataModel> {
    fun convert(dataModel: T)
}

class SettingsModel: IModel<SettingsDataModel> {
    override fun convert(dataModel: SettingsDataModel) {
        // Conversion of models here

    }
}

10-06 13:31