原始类型,无限制通配符和泛型中使用Object之间有什么区别

我正在阅读有关有效Java泛型的章节。

帮助我理解之间的区别SetSet<?>以及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

回到顶部