kotlin: 泛型一

一,功能

通常情况下 , 泛型参数 都使用 T 表示 ,
使用其它字母 或者 字符串 都可以表示 泛型参数 , 但是 约定俗成 都使用 T 来表示泛型

函数 的 参数 或 返回值 类型为 泛型类型 , 则该函数称为 泛型函数 

泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都是泛型 的话 ,
在该泛型函数 中可能需要使用多个泛型 , 使用不同的字母表示不同的泛型 ;
如果函数中 引入了新的泛型类型 , 需要在 fun 关键字 和 函数名 之间 , 使用 尖括号 <T> 注明 ;

二,例子: 泛型类和泛型函数

代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            // 泛型类
            class Box<T>(var content: T) {
                fun get(): T = content
                fun set(value: T) {
                    content = value
                }
            }

            // 泛型函数
            fun <T> printItem(item: T) {
                println("接收到的参数item: $item")
            }

            // 使用泛型
            val stringBox = Box("Hello")
            val intBox = Box(42)

            println(stringBox.get())  // Hello
            println(intBox.get())     // 42

            printItem("Kotlin")       // Item: Kotlin
            printItem(100)            // Item: 100
        }

运行结果:

image

三,例子:多个泛型参数

代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            // 多个类型参数
            class Pair<T, U>(val first: T, val second: U) {
                fun swap(): Pair<U, T> = Pair(second, first)

                override fun toString(): String = "($first, $second)"
            }

            // 使用多个类型参数
            val pair = Pair("Hello", 42)
            println("原数据:"+pair)  // (Hello, 42)

            val swapped = pair.swap()
            println("交换后:"+swapped)  // (42, Hello)

            // 不同类型参数
            val mixedPair = Pair("字符串", true)
            println("不同类型参数1:"+mixedPair)  // (String, true)
            // 不同类型参数
            val mixedPair2 = Pair(false,"字符串")
            println("不同类型参数2:"+mixedPair2)  // (String, true)
        }

运行结果:

image

四,例子: 泛型函数

代码:

        //处理按钮点击事件:
        binding.button3.setOnClickListener {
            // 泛型函数
            fun <T> createList(vararg items: T): List<T> {
                return items.toList()
            }

            //lambda表达式参数使用泛型
            fun <T> findFirst(list: List<T>, predicate: (T) -> Boolean): T? {
                for (item in list) {
                    if (predicate(item)) {
                        return item
                    }
                }
                return null
            }

            // 使用泛型函数
            val stringList = createList("a", "b", "c")
            val intList = createList(1, 2, 3, 4, 5)

            println(stringList)  // [a, b, c]
            println(intList)     // [1, 2, 3, 4, 5]

            val firstEven = findFirst(intList) { it % 2 == 0 }
            println("第一个偶数: $firstEven")  // 第一个偶数: 2
        }

运行结果:

image

 

posted @ 2025-09-06 08:37  刘宏缔的架构森林  阅读(21)  评论(0)    收藏  举报