kotlinGeneric

泛型

普通泛型–>和java一样

1
class Box<T>

类型变异 –>上下边界

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//生产者只能取出(get)
//消费者可写入取出,取出只能是object
//生产者(Producer)对应 Extends, 消费者(Consumer) 对应 Super.
// in -->只能被消费 = super
// out -->生产这 == extend
var extendsList : ArrayList<out String> = ArrayList(arrayListOf("1","2","3"))
var superList : ArrayList<in String> = ArrayList(arrayListOf("1","2","3"))
extendsList.get(0)
//无法写入
// extendsList.add("4")
println(extendsList[0])
superList.add("5")
println(superList[3])

星号投射–> <*> 并不知道怎么用,有知道的朋友可以联系我

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//如果参数本身添加了in 或者out,这个时候无法直接将该参数当做Any传给下一个函数,举个栗子
fun main(args: Array<String>) {
var strArr : Array<out String> = arrayOf("1")
var strArr2 : Array<in String> = arrayOf("1")
//这个调用就会报错,需要将testAny的参数对应改成out或者in,
// 然而这个并不灵活,改成in 或者out其中一个,另外一个就无法使用,这个时候可以使用*
//正确做法fun testAny(any : Array<*>)
testAny(strArr)
testAny(strArr2)
}
fun testAny(any : Array<Any>){
println(any)
}

泛型约束

1
2
//最常见的约束是 上界(upper bound), 与 Java 中的 extends 关键字相同
fun <T : Comparable<T>> sort(list: List<T>)

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器