public <E extends Foo> List<E> getResult(String s);
这个方法的返回类型是什么?为什么它似乎有两种返回类型?其中 Foo
是我的自定义类。
不,你没有两种返回类型。你看到的是一个泛型方法。
<E extends Foo>
→ 你在为你的方法声明一个泛型类型;List<E>
→ 这是你的返回类型。你的方法可以有一个泛型类型E
,它是Foo
的子类。该方法的返回类型是List<Foo-或-Foo的任何子类型>
。
返回类型是List<E>
。子句<E extends Foo>
不是返回类型,而是一个泛型类型声明,指定特定类型E
必须是Foo
(或Foo
的子类)。这是声明泛型方法的标准语法。
E
可以是 Foo
的子类。 - Luiggi Mendoza<E extends Foo> // declares the bounds for the generic type `E`
List<E> // declares the return value
List<E>
。
List<? extends Foo>
。 - Luiggi Mendoza?
由调用者指定。方法本身没有选择。它可以合法地返回一个空的List
,一个包含null
的List
,null
或抛出异常/不返回。 - Tom Hawtin - tackline