Lets say that I have this sample code in Java:
public class MyActivityDelegate implements ActivityMvpDelegate
where ActivityMvpDelegate:
interface ActivityMvpDelegate<V extends MvpView, P extends MvpPresenter<V>>
Same code converted to Kotlin looks like this
class MyActivityDelegate(private val activity: Activity) : ActivityMvpDelegate<MvpView, MvpPresenter<V>>
Of course I got unresolved reference at V
and I'm not sure how this code should looks, in Java I don't have to specify generic over here.. any tips gonna be much appreciated
Your interface declaration requires that
V
extends MvpView
V
(exactly V
, not its subtype) is used as generic parameter for P extends MvpPresenter<V>
Given that, you cannot extend ActivityMvpDelegate<MvpView, MvpPresenter<V>>
, because there's no guarantee that V
is exactly MvpView
(also, in Kotlin, generic parameters are not implicitly inherited, you have to redeclarate them like class SomeClass<T> : SomeInterface<T>
).
You can, however, write it as
class MyActivityDelegate(private val activity: Activity)
: ActivityMvpDelegate<MvpView, MvpPresenter<MvpView>>
or introduce another generic parameter, so that V
and the argument for P
are still the same:
class MyActivityDelegate<T : MvpView>(private val activity: Activity)
: ActivityMvpDelegate<T, MvpPresenter<T>>
You can also change the generic declaration of your interface from P extends MvpPresenter<V>
to P extends MvpPresenter<? extends V>
(or use out V
in Kotlin), and you will be able to use any subtype of V
as the argument, including bounded generic:
class MyActivityDelegate<T : MvpView>(private val activity: Activity)
: ActivityMvpDelegate<MvpView, MvpPresenter<T>>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With