Kotlin – “in”关键字 – 用于什么?

我想了解什么时候在generics中使用“in”关键字,而不是“out”关键字(它允许分配给子类)。

如果它很重要,我实际上是按照这个教程 。

可以说我们有以下的类定义:

class ParameterizedConsumer { fun toString(value: T): String { return value.toString() } } 

这是如何编译的,因为值不能保证是一个字符串? 这是什么in关键字呢? 它告诉类有一个保证types不会是任何其他的子类? 我只是不清楚它的用途,你能帮忙吗?

该教程说,我将能够呼叫以下,但我失去了什么改变了:

  val parameterizedConsumer = ParameterizedConsumer() val ref: ParameterizedConsumer = parameterizedConsumer assertTrue(ref is ParameterizedConsumer) 

更新:我现在得到它。 意味着你可以在生产时沮丧。 和“在”意味着你可以在分配时倒立。

所以在Java中这是不允许的:

 // Java void demo(Source strs) { Source objects = strs; // !!! Not allowed in Java // ... } 

但是在kotlin中,我们可以解决,如果我们使用“out”关键字,我们可以分配给一个低级的类(子类)。 同样用“in”,我们可以在内部传入一个子类到内部使用,而不是外部使用。

它告诉类有一个保证types不会是任何其他的子类? 我只是不清楚它的用途,你能帮忙吗?

假设你有一个函数想要添加一些项目到你提供的列表中。 这些项目是Inttypes的。

问题:这个函数可以接受哪种列表?

答案: MutableListMutableListMutableList 。 或者,简而言之, MutableList

我会回答你的问题的一部分

这是如何编译的,因为值不能保证是一个字符串

所以呢? 你可以调用任何types的.toString() 。 这就是你得到一个字符串,你将返回。