当前位置: 首页 > 知识库问答 >
问题:

在返回参数中不应使用泛型通配符类型

红存
2023-03-14
interface Foo<T> {
  Collection<? extends T> next();
}

此外,是否可以说泛型通配符类型仅在方法的参数声明中才有意义?

共有1个答案

令狐建修
2023-03-14

使用通配符类型(例如在方法形参中)的主要好处是为用户提供了传递的灵活性,例如任何类型的Collectionlist或任何实现集合的东西(假设集合声明Collection<?>)。您经常会发现自己在形参中使用通配符类型。

但理想情况下,您应该避免将它们用作方法的返回类型。因为这样,即使该方法的用户不想在调用端使用通配符类型,也会迫使他们使用通配符类型。通过使用通配符类型,你说的是,嘿!这个方法可以返回任何类型的collection,所以您的工作就是处理它。你不该那么做。最好使用有界类型参数。使用有界类型参数,将根据您传递的类型或方法调用的目标类型推断类型。

这里引用了有效Java项目28中的一段话:

 类似资料:
  • 问题内容: 是否可以在方法的返回参数中使用通用通配符类型,这是否可行? 换句话说,确实可以像下面这样声明一个接口: 另外,可以说通用通配符类型仅在方法的 参数声明 时才有意义吗? 问题答案: 使用通配符类型(例如在方法正式参数中)的主要好处是为用户提供了灵活性,使其可以传递任何类型的,或任何实现Collection的东西(假设collection声明为)。您通常会发现自己在形式参数中使用通配符类型

  • 可以使用泛型将返回类型与参数类型匹配吗? 实例案例: 我有一个抽象类,可以从不同的POJO导入数据,这个类包含一个abstract方法importData。 importData返回的对象必须与传递给该方法的对象类型相同。 由于抽象方法的每个实现的对象类型不同,并且类型不扩展另一个,如何定义抽象方法,以便实现返回类型和传递类型必须匹配? 经过考验: 结果: 方法的返回类型不必与传递的对象类型匹配。

  • 所以我看了官方的java教程,https://docs.oracle.com/javase/tutorial/java/generics/index.html,也搜索了stackoverflow,结果发现使用

  • 问题内容: 我试图理解Java泛型,它们似乎很难理解。例如,这很好… …就是这个… … 还有这个 … …但是不能编译: 有人可以用简单的语言解释发生了什么吗? 问题答案: 对于泛型类型,主要要了解的是它们不是协变的。 因此,尽管您可以这样做: 以下内容将无法编译: 这是为了避免您绕过通用类型的情况: 因此,一一讲解您的示例 1个 您的通用方法采用a ,而您采用;(基本上是)。可以分配给类型,并且编

  • 我试图创建一个返回泛型类型参数的方法。 我有一个类车辆订单扩展抽象类订单。在类订单中,我创建了一个抽象方法接收HiredObject。这个方法不会接收任何参数,并将返回一个泛型。 我在VehicleOrder类中实现了这个方法,并将其设置为返回类参数vehicle。 问题是,当我实例化一个新的VeilceOrderorororororororororororororderororororororo

  • 问题内容: Java通常可以基于参数(甚至与返回类型(例如,与C#相反))来推断泛型。 恰当的例子:我有一个通用类,它只存储一对值,并且可以按以下方式使用: 该方法如下所示: 非常好。但是,这不再适用于以下需要通配符的用例: (请注意显式强制转换以进行正确的类型。) 代码失败,并显示以下错误(由Eclipse提供): 类型不匹配:无法从转换为 但是,显式调用构造函数仍然可以按预期工作: 有人可以解