可以说我在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 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>
(或out V
在Kotlin中使用),并且您可以使用的任何子类型V
作为参数,包括有限的泛型:
class MyActivityDelegate<T : MvpView>(private val activity: Activity)
: ActivityMvpDelegate<MvpView, MvpPresenter<T>>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句