“某种未知类型”是什么意思
究竟是什么意思 -Set
有一些通用参数,但我们不知道它是什么。
因此,分配给Set<?>
变量的集合可能是 a Set<String>
,或 a Set<Integer>
,或 aSet<Map<Integer, Employee>>
或包含任何其他特定类型的集合。
那么这对您如何使用它意味着什么?好吧,你从中得到的任何东西都将是 的一个实例?
,不管它是什么。因为我们不知道类型参数是什么,所以你不能说比集合的元素可以分配更具体的东西Object
(只是因为所有类都从它扩展而来)。
如果您正在考虑向集合中添加一些东西 - 好吧,该add
方法采用 a ?
(这是有道理的,因为这是集合中对象的类型)。但是,如果您尝试添加任何特定对象,您如何确定这是类型安全的?你不能——如果你要插入一个字符串,你可能会把它放到一个Set<Integer>
例子中,这会破坏你从泛型中获得的类型安全。因此,虽然您不知道泛型参数的类型,但您不能提供这种类型的任何参数(唯一的例外是null
,因为它是任何类型的“实例”)。
与大多数与泛型相关的答案一样,这集中在集合上,因为它们更容易本能地理解。但是,这些参数适用于任何采用泛型参数的类——如果它是使用无界通配符参数声明的?
,则您不能为其提供任何参数,并且您收到的该类型的任何值都只能分配给Object
.