Java泛型边界问题,super和extends关键字
背景
为什么JDK5要引入泛型,泛型保证参数类型一致性。什么叫类型一致?
假设有继承关系,A <- B <- C <- D <- E,
ArrayList
list.add(new C());
list.add(new D());
list.add(new B());//compile ERROR
并没有破坏list的类型一致性,因为list被声明参数类型时C,最终list中所有引用对象都是按照C的类型取出。
有了泛型特性之后,Java就应该使用带参数的类型,而不是rawtype。但是为了兼容,仍然支持rawtype使用。
泛型有些看起来奇怪的特性,在假设不能使用rawtype只能使用泛型的情况下就很好理解了。
List<Object> 和List<X>没有层次关系
Java给定一个具体的类型参数A之后的泛型List<Object>,与给定另一个具体的类型参数X的泛型List<X>之间没有层次关系,不论Object和X类型的层次关系如何。为什么这样设计?
假设
ArrayList
ArrayList
浙公网安备 33010602011771号