Kotlin: разрешить общее наследование

Прочитав те же статьи, я все еще не могу решить проблему с генериками:

У меня есть BaseActivity:

abstract class BaseActivity : MvpAppCompatActivity(), BaseView { abstract fun getPresenter():BasePresenter<BaseView> } 

Интерфейс BaseView для него

 interface BaseView : MvpView 

И точно BasePresenter

 open class BasePresenter<T : BaseView> : MvpPresenter<T>() 

Затем я создаю BaseConnectionView

 interface BaseConnectionView : BaseView 

И BaseConnectionPresenter

 class BaseConnectionPresenter<T : BaseConnectionView> : BasePresenter<T>() 

Поэтому, когда я создаю BaseConnectionActivity

 abstract class BaseConnectionActivity : BaseActivity(),BaseConnectionView { override abstract fun getPresenter(): BaseConnectionPresenter<BaseConnectionView> } 

У меня ошибка:

 Return type is BaseConnectionPresenter<BaseConnectionView>, which is not a subtype of overridden public abstract fun getPresenter():BasePresenter<BaseView> 

Но это подтип!

Как я могу решить эту проблему?

BaseConnectionPresenter – это подтип BasePresenter<T> с T: BaseConnectionView . Функция getPresenter возвращает BasePresenter<BaseView> . Проблема в том, что BasePresenter<T> не гарантируется быть BasePresenter<BaseView> . Следующие исправления:

 class BaseConnectionPresenter<T : BaseConnectionView> : BasePresenter<BaseView>() 

Решение было проще, чем я думаю, если использовать звездообразные проекции

Поэтому в BaseActivity я заменил

 abstract fun getPresenter():BasePresenter<BaseView> 

к

 abstract fun getPresenter():BasePresenter<*> 

И тогда я могу просто переопределить его новым ведущим, например

 override abstract fun getPresenter(): BaseConnectionPresenter<*> 
Intereting Posts
Невозможно инициализировать кнопку в диалоговом окне в Котлине получение переопределения исключение Тип возвращаемого метода не должен включать переменную типа или подстановочный знак в котлин Почему нулевые числа не сохраняют идентификатор Kotlin: «если элемент не в списке» правильный синтаксис Как установить прослушиватель движения для существующего вида Как избежать ошибки StackOverFlow в Java / Kotlin / IntelliJ IDEA? Значок переполнения Фрагмента по умолчанию Proguard – не запутывайте классы данных Kotlin Неверный положительный результат в проверке линзы Android для LinkedHashMap.remove () Убедитесь, что EditText пуст при вычислении чисел Котлин: Разница в определении коллекции Lint сбой на классе Java, читающий объект Kotlin Как начать аннотация Обработка (kapt) для локальной библиотеки? Использование функциональных интерфейсов с функциями функций в Котлине Не удалось найти org.jetbrains.kotlinx: kotlinx-html: 0.6.4