什么是关键字在kotlin
我无法理解,我无法在kotlin中findout关键字的含义。
你可以在这里查看例子:
List
如果有人能解释这个的意思。 这将是非常感激的。
有了这个签名:
List
你可以这样做:
val doubleList: List = listOf(1.0, 2.0) val numberList: List = doubleList
这意味着T是协变的 :
当声明C类的types参数T 时 , C
可以安全地作为C 的超types 。
这与在 ,例如
Comparable
你可以这样做:
fun foo(numberComparable: Comparable) { val doubleComparable: Comparable = numberComparable // ... }
这意味着T是逆变的 :
当声明一个类C的types参数T时, C
可以安全地作为C 的超types 。
另一种方法来记住它:
消费者在 ,生产者出 。
请参阅Kotlingenerics差异
请参阅kotlin手册
Kotlin
List
types是一个接口,提供只读操作,如大小,获取等。 像在Java中一样,它inheritance自Collection
,继而从Iterable
inheritance。 改变列表的方法由MutableList
接口添加。 这个模式也适用于Set
和/MutableSet Map
V>/MutableMap
和这个,
在Kotlin中,有一种方法可以向编译器解释这种事情。 这被称为声明站点差异:我们可以注释Source的types参数T,以确保它只从
Source
成员返回(产生),并且不会被消耗。 为此,我们提供out修饰符:> abstract class Source
{ > abstract fun nextT(): T } > > fun demo(strs: Source ) { > val objects: Source = strs // This is OK, since T is an out-parameter > // ... } 一般的规则是:当一个类
C
的types参数T
被声明出来时,它可能只在C
的成员中出现,但是作为返回,C
可以安全地是一个C
的超types。他们用“聪明的词”表示类
C
在参数T
是协变的,或者T
是协变types的参数。 你可以认为C是T的生产者,而不是T的消费者。 out修饰符称为方差注释,由于它是在types参数声明站点提供的,所以我们讨论声明站点方差。 这与Java的使用地点差异形成对比,types用法中的通配符使types协变。
List is like List super T>
和
List is like List implements T>
比如在Kotlin你可以做类似的事情
val value : List = listOf(1,2,3) //since List signature is List