本文共 1357 字,大约阅读时间需要 4 分钟。
一、Kot对泛型能有很好的支持,下面的例子,是基于泛型搭建的一个Mvp,感兴趣的话,可以自己debug调试一下。
import com.sun.xml.internal.rngom.parse.host.Baseimport java.lang.reflect.ParameterizedType/** * @author:wangdong * @description:泛型实现一个mvp的框架 *//** * 视图接口 * 协变out */interface Iview>>{ val presenter: P}/** * 主持人 */interface IPresenter >>{ val view: V}/** * 定义两个实现类,各自实现两个接口 */abstract class BaseView >>:Iview { override val presenter: P //初始化presenter init { presenter = findPresenterClass().newInstance() presenter.view = this } private fun findPresenterClass():Class
{ var thisClass: Class<*> = this.javaClass while (true){ (thisClass.genericSuperclass as? ParameterizedType)?.actualTypeArguments?.firstOrNull() ?.let { return it as Class
} ?: run{ thisClass = thisClass.superclass ?: throw IllegalArgumentException() } } }}abstract class BasePresenter
>>:IPresenter { override lateinit var view: @UnsafeVariance V}class MainView: BaseView ()class MainPresenter: BasePresenter ()fun main(args: Array ) { MainView().presenter.let(::println)}
最后的输出结果
MainPresenter@7a81197d
好啦,结束啦
转载地址:http://bmxto.baihongyu.com/