我正在阅读下面给出方法签名的问题
public static <E extends CharSequence> List<? super E> doIt(List<E> nums)
我无法解码语法。我对泛型非常陌生,无法理解这部分。第一部分 < 不是E extends CharSequence>
告诉 E 应该是什么,既作为参数又作为返回类型。但我确实看到List<? super E>
了,这定义了返回类型的界限。有人可以通过一个例子帮助我理解这一点吗?
谢谢。
<E extends CharSequence>
告诉这E
将是 的子类型CharSequence
。这告诉编译器将传递给此方法的类型参数将是该CharSequence
类型的一个或子类型。这种类型的界限称为参数界限。我已经写了一篇关于这个主题的文章,如果你喜欢,你可以看看。
List<? super E>
告诉这个方法将返回一个List
元素,其类型将是E
或者它的超类型。
doIt
因此,您的方法可以返回以下所有类型-
// trivial one.
return new ArrayList<E>();
// If F is a super type of E, then the following line is valid too.
return new ArrayList<F>();
// The following will also be valid, since Object is a super type of all
// other types.
return new ArrayList<Object>();
List<? super E>
- 这通常称为逆变。看看这个。