kotlin范型中的out和in关键字有什么作用?
class Demo<in T>
class Demo<out T>
in
和out
都是为了让范型更好用,kotlin中的<out T>
相当于java中的<? extends T>
,而<in T>
就相当于<? super T>
,但是in
和out
关键字的功能要更强大一些。
使用out
关键字修饰的范型,能够实现子类型的范型类直接赋值给父类型的范型类,比如List<out T>
。
val doubleList: List<Double> = listOf(1.0, 2.0)
val numberList: List<Number> = doubleList
而使用in
关键字修饰的范型,能够实现父类型的范型类直接赋值给子类型的范型类,比如Comparable<in T>
。
val numberComparable: Comparable<Number> = ...
val doubleComparable: Comparable<Double> = numberComparable
更多内容可以参考Kotlin范型中的in和out关键字(协变和逆变)或者官方文档。
内容