在Java泛型中,List<? super String>是什么意思?

13

有人可以解释一下这个代码为什么能编译通过并且它的工作原理吗?

List<? super String> list = new ArrayList<Object>();

据我理解,实现这个操作需要使用字符串列表或具有字符串作为超类的对象列表?我有漏掉什么吗?


顺便提一句 - String类是final的,没有其他类继承它。 - MByD
是的,我知道,这只是Java认证考试中出现的一个案例 =) - Marthin
3个回答

26
没有(也就是说,你确实错过了一些内容 :-) 。<? super String>表示任何一个是 String 的超类(包括 String 本身)的类。(在这种情况下,唯一符合条件的其他适当类是 Object。)
您描述的应该是 <? extends String>(在这种特定情况下不会很有用,因为 Stringfinal,所以它没有子类)。

5

<? super String>接受String和任何超类

不要混淆:

<? extends String>接受String和任何子类(没有子类,因为Stringfinal)。


0
由于String是final的,它不能成为任何其他类的超类。List表示任何是String的超类的类型。实际上,Object是String(实际上是任何类)的超类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接