解密泛型语法

时间:2013-08-25 07:52:25

标签: java generics

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

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

我无法解码语法。我对仿制药非常新鲜而且无法理解 这部分。不是第一部分&lt; E extends CharSequence>告诉E应该是什么,两者都是 作为参数和返回类型。但我确实看到List<? super E>,这定义了 返回类型的边界。有人可以通过一个例子来帮助我理解这个吗?

感谢。

1 个答案:

答案 0 :(得分:4)

<E extends CharSequence>

表示E将是CharSequence的子类型。这告诉编译器将传递给此方法的类型参数将是CharSequence或该类型的子类型。这种类型的绑定称为参数绑定。我已就此主题撰写an article,如果您愿意,可以查看。

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> - 这通常被称为逆变。 Check this out