kotlin 泛型的一个问题请求大神帮忙一下


#1

interface IView<out P:IPresenter<IView

>>

interface IPresenter<out V:IView<IPresenter>> 这两句代码理解不了

1.去掉 out 报错 需要 IView<IPresenter<IView

>> 而传入 的是
IView

然后让iview 支持 协变, IView

可以 协变成 IView<IPresenter<IView

>> 能这样理解吗
2.当一个接口支持协变的时候,那另外一个 接口不支持协变的情况下 Type parameter P is declared as ‘out’ but occurs in ‘invariant’ position in type IPresenter<IView

> 这个编译器提醒 具体是什么意思


#2

View 和 Presenter 上都有泛型绑定,你不写泛型的话,类型就不匹配,可以这样写

interface View<V : View<V, P>, P : Presenter<V, P> >
interface Presenter<V : View<V, P>, P : Presenter<V, P>>

我看了下谷歌的官方架构,不推荐类型绑定写法
https://github.com/android/architecture-samples/blob/todo-mvp-kotlin/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksContract.kt

是通过单向绑定加构造函数实现双向依赖的


京ICP备16022265号-2 Kotlin China 2017 - 2018