Kotlin使用泛型搭建一个MVP最简单实例

一、Kot对泛型能有很好的支持,下面的例子,是基于泛型搭建的一个Mvp,感兴趣的话,可以自己debug调试一下。

import com.sun.xml.internal.rngom.parse.host.Base
import 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

好啦,结束啦

你可能感兴趣的:(Kotlin语言)