Kotlingenerics中“*”与“任意”的区别

我不知道我完全理解SomeGenericSomeGeneric之间的区别。 我认为“*”代表任何东西(通配符),“Any”代表所有对象inheritance的对象。 所以看起来他们应该是一样的,但他们不是?

将星形投影看作不仅仅是表示任何types的方式,而是一些你不知道究竟是什么的固定types可能是有帮助的。

例如,typesMutableList<*>表示某个东西的列表(你不知道到底是什么)。 所以如果你尝试添加一些东西到这个列表中,你将不会成功。 它可能是一个String的列表,或者一个Int列表,或者其他的列表。 编译器将不允许将任何对象放在这个列表中,因为它不能validation列表是否接受这种types的对象。 但是,如果您尝试从这样的列表中获取元素,那么您肯定会得到一个Any?types的对象Any? ,因为Kotlin中的所有对象都从Anyinheritance。

在上下文中,我想你暗示, SomeGeneric<*>相当于SomeGeneric 。 Java的等价物是SomeGeneric SomeGeneric

这个语法叫做“star-projections”。 以下是官方文档: https : //kotlinlang.org/docs/reference/generics.html#star-projections