Java泛型边界问题,super和extends关键字

背景

为什么JDK5要引入泛型,泛型保证参数类型一致性。什么叫类型一致?

假设有继承关系,A <- B <- C <- D <- E,

ArrayList<C> list;
list.add(new C());
list.add(new D());
list.add(new B());//compile ERROR

并没有破坏list的类型一致性,因为list被声明参数类型时C,最终list中所有引用对象都是按照C的类型取出。

有了泛型特性之后,Java就应该使用带参数的类型,而不是rawtype。但是为了兼容,仍然支持rawtype使用。
泛型有些看起来奇怪的特性,在假设不能使用rawtype只能使用泛型的情况下就很好理解了。

List

猜你喜欢

转载自www.cnblogs.com/linlei2099/p/8989151.html