小编典典

Kotlin 泛型中“*”和“Any”之间的区别

all

我不确定我是否完全理解 和
之间的SomeGeneric<*>区别SomeGeneric<Any>。我认为*代表任何东西(通配符)并Any代表 所有
对象继承的对象。所以看起来他们应该是一样的,但他们是吗?


阅读 40

收藏
2022-08-16

共1个答案

小编典典

将星形投影视为一种不仅可以表示任何类型,还可以表示某些您不知道到底是什么的固定类型的方法可能会有所帮助。

例如,类型MutableList<*>表示 某物
的列表(您不知道具体是什么)。因此,如果您尝试将某些内容添加到此列表中,您将不会成功。它可能是Strings 的列表,或Ints
的列表,或其他东西的列表。编译器根本不允许将任何对象放入此列表中,因为它无法验证该列表是否接受此类型的对象。然而,如果你试图从这样的列表中取出一个元素,你肯定会得到一个
type 的对象Any?,因为 Kotlin 中的所有对象都继承自Any.

来自下面 的 asco评论:

另外List<*>可以包含任何类型的对象,但只能包含该类型,因此它可以包含字符串(但只能包含字符串),同时List<Any>
可以包含字符串和整数等等,都在同一个列表中。

2022-08-16