我正在阅读下面给出方法签名的问题
public static <E extends CharSequence> List<? super E> doIt(List<E> nums)
我无法解码语法。我对仿制药非常新鲜而且无法理解
这部分。不是第一部分&lt; E extends CharSequence>
告诉E应该是什么,两者都是
作为参数和返回类型。但我确实看到List<? super E>
,这定义了
返回类型的边界。有人可以通过一个例子来帮助我理解这个吗?
感谢。
答案 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