我正在阅读下面给出方法签名的问题
public static <E extends CharSequence> List<? super E> doIt(List<E> nums)
我无法解码语法。我对泛型很陌生,无法理解
这部分。第一部分不是 < E extends CharSequence>
告诉 E 应该是什么,两者
for 作为参数和返回类型。但我确实看到了List<? super E>
, 这定义了
返回类型的边界。有人可以通过示例帮助我理解这一点吗?
谢谢。
最佳答案
<E extends CharSequence>
表示E
将是 CharSequence
的子类型.这告诉编译器将传递给此方法的类型参数将是 CharSequence
。或该类型的子类型。这种类型的绑定(bind)称为参数绑定(bind)。我写了an article关于这个话题,如果你喜欢可以去看看。
List<? super E>
表示此方法将返回 List
类型为 E
的元素或其父类(super class)型。
因此,可以从您的 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 .
关于java - 破译泛型语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426840/