3

我正在阅读下面给出方法签名的问题

public static <E extends CharSequence> List<? super E> doIt(List<E> nums)  

我无法解码语法。我对泛型非常陌生,无法理解这部分。第一部分 < 不是E extends CharSequence>告诉 E 应该是什么,既作为参数又作为返回类型。但我确实看到List<? super E>了,这定义了返回类型的界限。有人可以通过一个例子帮助我理解这一点吗?

谢谢。

4

1 回答 1

4
<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>- 这通常称为逆变。看看这个

于 2013-08-25T07:54:08.010 回答