什么是关键字在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 Listtypes是一个接口,提供只读操作,如大小,获取等。 像在Java中一样,它inheritance自Collection ,继而从Iterableinheritance。 改变列表的方法由MutableList接口添加。 这个模式也适用于Set/MutableSetMap 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 

 List is like List 

比如在Kotlin你可以做类似的事情

  val value : List = listOf(1,2,3) //since List signature is List