原始类型,无限制通配符和泛型中使用Object之间有什么区别
我正在阅读有关有效Java泛型的章节。
帮助我理解之间的区别Set
,Set<?>
以及Set<Object>
?
以下段落摘自本书。
快速回顾一下,它
Set<Object>
是表示可以包含任何类型的对象的集合的参数化类型,Set<?>
是表示只能包含某些未知类型的对象的集合的通配符类型,并且Set
是选择退出通用类型的原始类型系统。
什么是“某些未知类型”?是所有未知类型的类型Object
吗?在这种情况下,Set<?>
和之间的具体区别是Set<Object>
什么?
回答:
- 原始类型(
Set
)将类型视为完全 没有通用类型信息 。请注意,不仅会T
忽略类型参数,而且还会忽略该类型方法可能具有的所有其他类型参数的微妙效果。您可以为其添加任何值,它将始终返回Object
。 Set<Object>
是Set
,它接受所有Object
对象(即 所有 对象),并将返回type的对象Object
。Set<?>
是Set
,它接受 某些特定但未知 类型的所有对象,并将返回该类型的对象。由于对此类型 一无所知 ,因此您无法在该集合中 添加 任何内容(除外null
),而您所知道的唯一有关其返回值的信息是它们是的子类型Object
。
以上是 原始类型,无限制通配符和泛型中使用Object之间有什么区别 的全部内容, 来源链接: utcz.com/qa/407664.html