Kotlingenerics中“*”与“任意”的区别
我不知道我完全理解SomeGeneric
和SomeGeneric
之间的区别。 我认为“*”代表任何东西(通配符),“Any”代表所有对象inheritance的对象。 所以看起来他们应该是一样的,但他们不是?
将星形投影看作不仅仅是表示任何types的方式,而是一些你不知道究竟是什么的固定types可能是有帮助的。
例如,typesMutableList<*>
表示某个东西的列表(你不知道到底是什么)。 所以如果你尝试添加一些东西到这个列表中,你将不会成功。 它可能是一个String
的列表,或者一个Int
列表,或者其他的列表。 编译器将不允许将任何对象放在这个列表中,因为它不能validation列表是否接受这种types的对象。 但是,如果您尝试从这样的列表中获取元素,那么您肯定会得到一个Any?
types的对象Any?
,因为Kotlin中的所有对象都从Any
inheritance。
在上下文中,我想你暗示, SomeGeneric<*>
相当于SomeGeneric
。 Java的等价物是SomeGeneric extends Object>
SomeGeneric extends Object>
。
这个语法叫做“star-projections”。 以下是官方文档: https : //kotlinlang.org/docs/reference/generics.html#star-projections