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不会是任何其他的子类? 我只是不清楚它的用途,你能帮忙吗?
假设你有一个函数想要添加一些项目到你提供的列表中。 这些项目是Int
types的。
问题:这个函数可以接受哪种列表?
答案: MutableList
, MutableList
, MutableList
。 或者,简而言之, MutableList
。
我会回答你的问题的一部分
这是如何编译的,因为值不能保证是一个字符串
所以呢? 你可以调用任何types的.toString()
。 这就是你得到一个字符串,你将返回。