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

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

一、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

    //初始化presenter
    init {
        presenter = findPresenterClass().newInstance()
        presenter.view = this
    }

    private fun findPresenterClass():Class<P>{
        var thisClass: Class<*> = this.javaClass
        while (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

好啦,结束啦

目录
相关文章
|
6月前
|
安全 Java Kotlin
Kotlin泛型:灵活的类型参数化
Kotlin泛型:灵活的类型参数化
|
1月前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
54 4
|
4月前
|
缓存 安全 Android开发
Android经典实战之用Kotlin泛型实现键值对缓存
本文介绍了Kotlin中泛型的基础知识与实际应用。泛型能提升代码的重用性、类型安全及可读性。文中详细解释了泛型的基本语法、泛型函数、泛型约束以及协变和逆变的概念,并通过一个数据缓存系统的实例展示了泛型的强大功能。
46 2
|
1月前
|
存储 安全 Java
Kotlin教程笔记(30) - 泛型详解
Kotlin教程笔记(30) - 泛型详解
|
2月前
|
存储 安全 Java
Kotlin教程笔记(30) - 泛型详解
Kotlin教程笔记(30) - 泛型详解
33 3
|
2月前
|
存储 安全 Java
Kotlin教程笔记(30) - 泛型详解
Kotlin教程笔记(30) - 泛型详解
|
2月前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
45 2
|
2月前
|
存储 安全 Java
Kotlin教程笔记(30) - 泛型详解
Kotlin教程笔记(30) - 泛型详解
32 0
|
2月前
|
存储 安全 Java
Kotlin教程笔记(30) - 泛型详解
本教程详细讲解了Kotlin中的泛型概念,包括协变、逆变、类型投影及泛型函数等内容。适合已有Java泛型基础的学习者,深入理解Kotlin泛型机制。快速学习者可参考“简洁”系列教程。
34 0
|
6月前
|
安全 Java 编译器
Android面试题之Java 泛型和Kotlin泛型
**Java泛型是JDK5引入的特性,用于编译时类型检查和安全。泛型擦除会在运行时移除类型参数,用Object或边界类型替换。这导致几个限制:不能直接创建泛型实例,不能使用instanceof,泛型数组与协变冲突,以及在静态上下文中的限制。通配符如<?>用于增强灵活性,<? extends T>只读,<? super T>只写。面试题涉及泛型原理和擦除机制。
43 3
Android面试题之Java 泛型和Kotlin泛型