当前位置: 首页 > 面试题库 >

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

宋志学
2023-03-14
问题内容

我正在阅读有关有效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


 类似资料:
  • 问题内容: 您能帮助我了解 无界通配符类型列表 和 原始类型列表 之间的区别吗? 除此之外,有人可以帮助我了解什么是有 界类型参数列表 ? 问题答案: 以下是这三个的摘要: :没有类型参数的列表。它是一个列表,其元素可以是任何类型- 元素可以是不同类型 。 :具有无限制类型参数的列表。它的元素是特定但未知的类型。 元素必须都是相同的类型 。 :带有类型参数称为的列表。所提供的类型必须是extens

  • 问题内容: 我正在阅读有关泛型的信息,但我不了解未绑定通配符的需求以及它与原始类型的区别。我读了这个问题,但仍然不清楚。在未绑定通配符的 Java教程页面中,我得到了以下两点,但我不明白第一点: 如果您正在编写可以使用该类中提供的功能实现的方法。 * 当代码在泛型类中使用不依赖于type参数的方法时。例如,或。实际上,之所以经常使用它是因为其中的大多数方法都不依赖。 有人可以用外行语言解释未绑定的

  • 问题内容: 我是Generic的新手,我的问题是:两个函数之间有什么区别: 功能1: 功能2: 问题答案: 第一个签名说:是一个ES列表。 第二个签名说:是某种类型的实例的,但是我们不知道类型。 当我们尝试更改方法时,区别变得明显,因此它需要第二个参数,该参数应添加到方法内部的列表中: 第一个效果很好。而且你不能将第二个参数更改为可以实际编译的任何参数。 实际上,我发现了一个更好的区别说明: 一个

  • 问题内容: Java具有泛型,而通过提供了非常强大的编程模型。那么,和Java泛型之间有什么区别? 问题答案: 它们之间有很大的区别。在C ++中,您不必为泛型类型指定类或接口。这就是为什么您可以创建真正的泛型函数和类,而不必担心键入错误。 上面的方法添加了两个相同类型的对象,并且可以用于具有“ +”运算符的任何类型T。 在Java中,如果要在传递的对象上调用方法,则必须指定一种类型,例如: 在C

  • 你好打字专家们, 有人可以解释为什么下面的代码在第 16 行给我一个错误,而不是在第 13 行给我一个错误。这是预期功能还是缺少功能? 密码 游乐场链接

  • 问题内容: 我已经看过以前用来表示任何对象的通配符-但最近看到了以下用法: 由于所有对象都扩展了对象,所以这两种用法是同义词吗? 问题答案: 并且是同义的,正如你所期望的。 在某些情况下,泛型实际上并不是多余的。例如,将导致成为下删除,而与它会成为下删除。(如果你要保留与使用的前泛型API的兼容性,这可能很重要。) 来源:http : //download.oracle.com/javase/tu