为什么这个Java方法似乎有两种返回类型?

12
public <E extends Foo> List<E> getResult(String s);

这个方法的返回类型是什么?为什么它似乎有两种返回类型?其中 Foo 是我的自定义类。


1
它将返回一个 List<? extends Foo> - Luiggi Mendoza
2
@LuiggiMendoza ?由调用者指定。方法本身没有选择。它可以合法地返回一个空的List,一个包含nullListnull或抛出异常/不返回。 - Tom Hawtin - tackline
3个回答

25

不,你没有两种返回类型。你看到的是一个泛型方法

  • <E extends Foo> → 你在为你的方法声明一个泛型类型;
  • List<E> → 这是你的返回类型。

你的方法可以有一个泛型类型E,它是Foo的子类。该方法的返回类型是List<Foo-或-Foo的任何子类型>


7

返回类型是List<E>。子句<E extends Foo>不是返回类型,而是一个泛型类型声明,指定特定类型E必须是Foo(或Foo的子类)。这是声明泛型方法的标准语法。


E 可以是 Foo 的子类。 - Luiggi Mendoza

4
请查看与泛型相关的Java 文档
<E extends Foo> // declares the bounds for the generic type `E`
List<E> // declares the return value

该方法的返回类型是List<E>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接