关于泛型案例MVP这里的疑问

来源:9-7 小案例:泛型实现一个MVP框架

慕移动8264039

2019-05-31

老师,我看到视频kotlin泛型案例MVP这里,有个地方不知道怎么理解。。。为什么加上协变标识符out以后编辑器就不报错了呢?

interface IView<out P : IPresenter<IView<P>>>
interface IPresenter<out V : IView<IPresenter<V>>>

这个代码如果用java来写是不是就是这样:

public interface IView<P extends IPresenter> {

}

public interface IPresenter<V extends IView> {

}

我想表达的就是,我在写类似代码的时候怎么就能知道我需要添加协变关键字就行了,而不是认为这么写是不对的。不知道老师能不能理解我想表达的意思?

写回答

1回答

bennyhuo

2019-05-31

要不要加out,主要看你真实的参数是不是声明的参数类型本身,例如我声明的是A,那么真实的类型就一定是A,out A的话,那么就允许是A的子类。

还有一个方便的判断方法,out表示方法的返回值类型,因此泛型参数如果用在返回值,一般就得加out,如果用在参数,那就用in。

如果你对类型的理解暂时还没有特别熟悉,就按照我说的方法把结果试出来~多体会体会~

1
0

Android首选开发语言Kotlin入门与进阶

Google I/O大会钦定Android一级开发语言,现在不学,等待何时

3122 学习 · 387 问题

查看课程