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

import com.sun.xml.internal.rngom.parse.host.Base
import java.lang.reflect.ParameterizedType/*** @author:wangdong* @description:泛型实现一个mvp的框架*/
/*** 视图接口* 协变out*/
interface Iview<out P: IPresenter<Iview<P>>>{val presenter: P
}/*** 主持人*/
interface IPresenter<out V: Iview<IPresenter<V>>>{val view: V
}/*** 定义两个实现类,各自实现两个接口*/
abstract class BaseView<out P: BasePresenter<BaseView<P>>>:Iview<P>{override val presenter: P//初始化presenterinit {presenter = findPresenterClass().newInstance()presenter.view = this}private fun findPresenterClass():Class<P>{var thisClass: Class<*> = this.javaClasswhile (true){(thisClass.genericSuperclass as? ParameterizedType)?.actualTypeArguments?.firstOrNull()?.let {return it as Class<P>}?: run{thisClass = thisClass.superclass ?: throw IllegalArgumentException()}}}
}abstract class BasePresenter<out V: Iview<BasePresenter<V>>>:IPresenter<V>{override lateinit var view: @UnsafeVariance V
}class MainView: BaseView<MainPresenter>()class MainPresenter: BasePresenter<MainView>()fun main(args: Array<String>) {MainView().presenter.let(::println)
}

最后的输出结果

MainPresenter@7a81197d

好啦,结束啦

Kotlin使用泛型搭建一个MVP最简单实例相关推荐

  1. net Core做一个webApi的简单实例

    用NetCore 和Dapper 和mySql做一个简单的实例, 一准备工作 1:VS2017+windos系统,也可以用其他的操作系统和工具 2:一台Cenetos的虚拟机或者虚拟机 二:开始 1: ...

  2. 一个ant的简单实例

    0.安装 0.1.到http://ant.apache.org/bindownload.cgi 下 載 Ant,我使用的版本是1.70,解压缩下载文件到你的工作目录, 这里以d:\ant_home 为 ...

  3. java easyrest_resteasy简单实例

    1.建一个maven web项目 新建一个maven项目,next,第一个框不要勾选 选择maven-archetype-webapp,建一个web项目 键入项目组织id与项目id 一般此时搭建的只是 ...

  4. SpringBoot搭建一个简单的天气预报系统(一)

    章节目录 1. 前言 2. 数据来源 3. 实战 3.1 开发环境 3.2 功能需求 3.3 手动编码 3.3.1 vo层 3.3.2 service层 3.3.3 controller层 3.3.4 ...

  5. 用 cooking 搭建一个简单又优雅的 Vue 项目开发环境 (入门篇)

    本文适合 Vue 的初学者,以及对 webpack 不熟悉的同学阅读.前提是你要会用基本的命令行. Node 和 NPM,以及掌握 ES2015 的基础知识.本文都是在 macOS 环境下运行,要求使 ...

  6. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbo zookeeper 更多 个人分类: ...

  7. 用思科网络模拟器搭建一个简单的局域网

    目录 前言 搭建 配置 前言 在搭建一个简单的局域网前,你必须知道一些常识. 网线(双绞)线的标准 T568A标准:白绿.绿.白橙.蓝.白蓝.橙.白棕.棕 T568B标准:白橙.橙.白绿.蓝.白蓝.绿 ...

  8. iris流程图_如何搭建一个简单的机器学习流水线?

    阅读此分步教程,学会通过导入scikit-learn包来搭建一个简单的机器学习流水线(pipeline) 一个机器学习模型中,有很多可移动的组件需要被组合在一起,模型才能被执行并成功的得到结果.把机器 ...

  9. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?

    推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...

最新文章

  1. Caffe源码中math_functions文件分析
  2. mysql数据库c 操作o_linux下c操作mysql数据库。gcc报错。谁能帮忙看下啊。
  3. centos6.5环境下zookeeper-3.4.6集群环境部署及单机部署详解
  4. MyBatisPlus(基于starter和Bean方式)
  5. 数据类别不平衡/长尾分布?不妨利用半监督或自监督学习
  6. spark视频-spark机器学习
  7. flex发布的release程序要配release的Flash Player,速度飞快!如果有一方是debug版本的,速度就降下来了,要注意!...
  8. 【车牌识别】基于matlab APP模板匹配车牌识别(桂贵京粤苏渝)【含Matlab源码 217期】
  9. 【STM32F429的DSP教程】第13章 DSP快速计算函数-三角函数和平方根
  10. 计算机无法启动无法修复工具,windows资源保护无法启动修复服务的解决方法
  11. 内外边距问题(清除、合并、塌陷)
  12. 安卓项目图片缓存实现
  13. google play直接下载apk安装包文件教程(blynk)
  14. git commit 约定式提交
  15. 写完这段代码,就被开除了……
  16. springboot接收多对象_SpringBoot Controller 中使用多个@RequestBody的正确姿势
  17. 图像处理 真彩色增强
  18. 自动驾驶2020:跨越险阻,珠峰沿途好风景
  19. 人工智能写作平台有哪些?智能写作平台哪个好
  20. 如何对用户绑定的身份证真实性进行实名认证API接口(java)

热门文章

  1. 电影《这个杀手不太冷》观影感受
  2. 迎难而上,阿里高频考点2023Java岗面试突击手册
  3. Python 使用 twitter API 获取twitter用户信息
  4. html导航凹凸效果,纯CSS实现底部弧度效果(凹凸圆弧)
  5. ERROR: Failed to resolve: xxx Affected Modules: xxx
  6. iOS-无痕埋点设计
  7. 小米手机 adbinterface_啥?消息称小米正在研发1.5亿像素镜头手机
  8. NUIST找工作小玩具
  9. 开发者说:深度剖析开源分布式事务方案 Seata 的事务协调器
  10. Linux内核分析 笔记六 进程的描述和进程的创建 ——by王玥