kotlin 泛型、委托

java从1.5引入泛型,kotlin基于java1.6,主要作用

  • 类型检查,编译时检查错误,提供安全保证
  • 自动类型转换

一、泛型类

复制代码
class Box<T>(t : T) {
    var value = t
}

fun main(args: Array<String>) {
    var boxInt = Box<Int>(10)
    var boxString = Box<String>("Runoob")
    println(boxInt.value)
    println(boxString.value)
}
复制代码

二、泛型方法

复制代码
fun main(args: Array<String>) {
    val age = 23
    val name = "runoob"
    val bool = true
    doPrintln(age)    // 整型
    doPrintln(name)   // 字符串
    doPrintln(bool)   // 布尔型
}

fun <T> doPrintln(content: T) {
    when (content) {
        is Int -> println("整型数字为 $content")
        is String -> println("字符串转换为大写:${content.toUpperCase()}")
        else -> println("T 不是整型,也不是字符串")
    }
}
复制代码

三、泛型约束

使用泛型约束,对参数类型指定一个允许的类型范围

常见的是约束上限

fun <T : Comparable<T>> sort(list: List<T>) {
    // ……
}

compara 的子类型可以使用

sort(listOf(1, 2, 3))

 四、委托

1、类委托

类委托核心思想就是把一个类的具体实现委托给另外一个类,使用 by 关键字进行委托

复制代码
//定义一个 MySet 类,它里面的具体实现都委托给了 HashSet 这个类,这是是类委托
class MySet<T>(val helperSet: HashSet<T>) : Set<T>{

    override val size: Int get() = helperSet.size

    override fun contains(element: T) = helperSet.contains(element)

    override fun containsAll(elements: Collection<T>) = helperSet.containsAll(elements)

    override fun isEmpty() = helperSet.isEmpty()

    override fun iterator() = helperSet.iterator()
}

/**
 * 如果我们使用 by 关键字,上面的代码将会变得非常整洁,同时我们可以对某个方法进行重写或者新增方法
 * 那么 MySet 就变成了一个全新的数据结构类
 */
class MySet<T>(val helperSet: HashSet<T>) : Set<T> by helperSet{
     fun helloWord(){
        println("Hello World")
    }
    
    override fun isEmpty() = false
}
复制代码

2、属性委托

属性委托的核心思想是将一个属性的具体实现委托给另一个类去完成

参考:(23条消息) “Kotlin“系列: 一、Kotlin入门_sweetying520的博客-CSDN博客

posted @   随易来了  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示