Расширение общего класса в Котлине

Допустим, что у меня есть этот пример кода в Java:

public class MyActivityDelegate implements ActivityMvpDelegate 

где ActivityMvpDelegate:

 interface ActivityMvpDelegate<V extends MvpView, P extends MvpPresenter<V>> 

Тот же код, преобразованный в Kotlin, выглядит так

 class MyActivityDelegate(private val activity: Activity) : ActivityMvpDelegate<MvpView, MvpPresenter<V>> 

Конечно, я получил неразрешенную ссылку на V и я не уверен, как этот код должен выглядеть, в Java мне не нужно указывать общий текст здесь .. любые советы будут высоко оценены

Декларация вашего интерфейса требует, чтобы

  • V расширяет MvpView
  • V (точно V , а не его подтип) используется как общий параметр для P extends MvpPresenter<V>

Учитывая, что вы не можете продлить ActivityMvpDelegate<MvpView, MvpPresenter<V>> , потому что нет гарантии, что V точно является MvpView (также в Kotlin, общие параметры неявно унаследованы, вам нужно их class SomeClass<T> : SomeInterface<T> как class SomeClass<T> : SomeInterface<T> ).

Однако вы можете написать это как

 class MyActivityDelegate(private val activity: Activity) : ActivityMvpDelegate<MvpView, MvpPresenter<MvpView>> 

или ввести другой общий параметр, так что V и аргумент для P все те же:

 class MyActivityDelegate<T : MvpView>(private val activity: Activity) : ActivityMvpDelegate<T, MvpPresenter<T>> 

Вы также можете изменить общее объявление вашего интерфейса с P extends MvpPresenter<V> на P extends MvpPresenter<? extends V> P extends MvpPresenter<? extends V> (или использует out V в Kotlin), и вы сможете использовать любой подтип V в качестве аргумента, включая ограниченный родовой:

 class MyActivityDelegate<T : MvpView>(private val activity: Activity) : ActivityMvpDelegate<MvpView, MvpPresenter<T>>