0
点赞
收藏
分享

微信扫一扫

Kotlin中泛型与vararg可变参数的使用

Android开发指南 2022-02-07 阅读 70
//Kotlin中泛型与vararg可变参数的使用
class KtBase10<T>(vararg objects: T, var isMap: Boolean) {
    //out 这里的T只能被读取,不能修改
    private val objectArray: Array<out T> = objects

    fun showObj(index: Int): T? = objectArray[index].takeIf { isMap } ?: null

    fun <O> mapObj(index: Int, mapAction: (T?) -> O): O? = mapAction(objectArray[index].takeIf { isMap })
//    fun <O> mapObj(index: Int, mapAction: (T?) -> O): O? {
//        return mapAction(objectArray[index].takeIf { isMap })
//    }
}

fun main(args: Array<String>) {
    val p: KtBase10<Any?> = KtBase10("yuknight", 123, 22.1f, null, 'A', isMap = true)
    println(p.showObj(0))
    println(p.showObj(1))
    println(p.showObj(2))
    println(p.showObj(3))
    println(p.showObj(4))
    println()
    var r: Any? = p.mapObj(0) {
        it.toString().length
    }
    println(r)//8
    var r1 = p.mapObj(1) { obj: Any? ->
//        obj.toString().length
        "第二个参数是:$obj"
    }
    println(r1)//第二个参数是:123
    //
    val p2: KtBase10<String> = KtBase10("AAA", "BBB", "CCCC", isMap = true)
    val r3 = p2.mapObj(0){
        it
        "转成String类型:$it"
    }
    println(r3)//转成String类型:AAA
    val r4 = p2.mapObj(2){
        str: String? ->  "转成String类型:$str"
    }
    println(r4)//转成String类型:CCCC

}
举报

相关推荐

0 条评论