通过代码发现, List和 List之间并没有关系,尤其需要注意的是,不要以为 它们是继承关系。如果想用另 一个容器指代 List, 就用到了通配符,可以用 List extends Fruit>来 指 代 List。 此用法大多作为方法的参数判断,例如某方法参数需要一个 Fruit 子类的容器。另外还需注意,无法通过 List extends Fruit>向容器中添加数据,只能获取 数据。原因就是这个容器指代了一切继承自 Fruit 的类的容器,所以无法确定是否正确地向容器 中添加了适当的类型。例如当? Extend Fruit 指代一个 Apple 容器时,如果向容器中添加 Orange 对象就会出现错误。
List super Apple>指代了 Fruit 至 Apple 及派生类继承关系链的对象,可以向其添加对象, 因为添加的对象类型更加明确,可以通过类型转换成基类 Fruit来获取和使用对象。
1.7.3 泛型接口
Java 的泛型区别于 C++ 的泛型实现主要在类型擦除。类型擦除就是说 Java 泛型只在编译期间 进行静态类型检查,编译器生成的代码会擦除相应的类型信息,这样到了运行期间实际上 JVM 根 本就不知道泛型所代表的具体类型。也就是说在运行期间无法识别List和 List, 因 为它们都是 List
暂时没有评论,来抢沙发吧~