【发布时间】:2011-03-09 09:04:36
【问题描述】:
在 Java 类型参数中,是否仅指严格的子类型?还是 E 也足够了?
【问题讨论】:
标签: java generics super extends bounded-types
在 Java 类型参数中,是否仅指严格的子类型?还是 E 也足够了?
【问题讨论】:
标签: java generics super extends bounded-types
这并不严格; E 就足够了。
【讨论】:
List<? extends Animal> animalList=new List<Dog>();
List<? extends Animal> animalList=new List<Animal>();
这两行都编译没有任何错误。 任何以列表为参数的函数都理解列表中的对象是 E 类型或 E 的子类型。
【讨论】:
是的,super 和 extends 分别给出了包容性的下限和上限。
这是来自Angelika Langer's Generics FAQ的引述:
什么是有界通配符?
具有上限的通配符类似于
? extends Type,代表所有类型的家族,它们是Type的子类型,类型Type被包含。Type被称为上限。具有下界的通配符看起来像
? super Type,代表所有类型的家族,它们是Type的超类型,类型Type被包含 .Type被称为下界。
【讨论】:
<T extends E> 的方法,如果我尝试传递 E 实例,则会出错。