泛型

Fruit <- Apple
Fruit <- Orange
Fruit[] f = new Apple[10];
f[0] = new Apple();
f[1] = new Orange();

以上编译阶段都不会报错。
但是运行阶段数组new的是Apple,JVM就认为数组类型为Apple类型,所以添加其他的Fruit就会出现运行错误java.lang.ArrayStoreException

泛型目的之一就是要在编译期让错误抛出,而不是等到运行期才知道错误。

泛型通过限定通配符来限制数组类型
List<? extends Fruit> f = Arrays.asList(new Apple());
extends限定通配符不能使用add方法,也就是不能新增item,因为编译器只知道list内存的是fruit的子类型,不知道add的是Fruit的哪种子类型,所以就禁止使用add。但是可以使用get方法获取item的向上转型Fruit,Fruit就是该数组的上边界。
List<? super Fruit> f
super限定通配符不能使用get方法,可以使用add方法新增Fruit或其子类型,因为编译器只知道该list内类型为Fruit或其父类,可以使用add方法可以增加fruit及其子类型,因为在add过程中会向上转型成Fruit,而不能使用get方法,因为不知道get出的Obj到底是哪个子类型

java泛型使用类型擦除方法,类型只存在编译期,运行时,并不知道类型存在。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 参数类型的好处 在 Java 引入泛型之前,泛型程序设计是用继承实现的。ArrayList 类只维护一个 Obje...
    杰哥长得帅阅读 4,406评论 0 3
  • 本文大量参考Thinking in java(解析,填充)。 定义:多态算是一种泛化机制,解决了一部分可以应用于多...
    谷歌清洁工阅读 3,349评论 0 2
  • 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Jav...
    横冲直撞666阅读 3,134评论 0 0
  • 2.简单泛型 -********Java泛型的核心概念:告诉编译器想使用什么类型, 然后编译器帮你处理一切细节 2...
    CodingHou阅读 3,012评论 0 0
  • 梦想对自己未来的美好期待。 单纯的乐观不一定对成功有好处。 首先是行动力被瘫痪,有志之人立长志,无知之人常立志。除...
    雪雪Maisie阅读 1,396评论 0 0

友情链接更多精彩内容