Kotlin переопределяет забаву с подтипом

У меня возникли проблемы с наследованием интерфейса, содержащего метод / fun базового типа, который я бы хотел переопределить как подтип в классе, реализующем его.

Пока у меня есть интерфейс

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

без необходимости бросать его. Я думаю, я не могу, потому что это изменяет подпись забавы, делая это не реальным переопределением. Я пробовал использовать generics и общие ограничения, но не повезло:

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

    Я думаю, я наклоняю, потому что он изменяет подпись забавы, что делает ее не реальной переопределением

    Вы правы, это невозможно: Kotlin , как и Java , не допускает ковариантных аргументов метода . Два метода fun foo(n: Number) и fun foo(I: Int) будут считаться «перегрузками» вместо «переопределений».

    Вы должны пойти с дженериками, как уже предполагал фал . См. Пример здесь .

    Intereting Posts
    Свойства бина, не равные нулю при инициализации, становятся нулевыми при вызове метода @Transactional Значения по умолчанию с помощью @ProjectedPayload / ProjectingJackson2HttpMessageConverter Не выходите из программы Kotlin, пока выполняется несколько сопрограмм Тип универсального парного типа для дополнительных целей В Android Java / Kotlin реализация интерфейса дает ему прямой доступ к локальным переменным класса вложенности Как реализовать проверенный конструктор в Котлине? Двухмерный общий поставщик массивов Ошибки привязки данных в прикладном модуле Получение параметров формы на сервер Ktor Kotlin smart cast не работает для LinearLayout.LayoutParams Проблема с помехами в WebFlux WebTestClient и Kotlin Доступ к объекту класса Kotlin из Java Kotlin: почему параметры конструктора имеют «внутреннюю» видимость по умолчанию? не удалось построить проект kotlin с градиентом Увеличивает ли Android Studio 3.0 информацию о параметрах запроса?