- 1、本文档共83页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 类型通配符 泛型中的extends ListInteger list1 = new ArrayListInteger(); list1.add(new Integer(88)); List? list2 = list1; System.out.println(list2.get(0)); ListInteger list1 = new ArrayListInteger(); list1.add(new Integer(88)); List? list2 = list1; list2.add(new Integer(99)); * 类型通配符 泛型中的extends 在用List?类型定义的变量中,只可以从中检索元素,而不能增加元素。 在代码片段1中,对于 list2,编译器并不知道List?的类型参数的值,但是编译器可以进行一些简单的类型推理,编译器推断未知的类型参数必须扩展Object,所以编译器允许调用get()方法并推断其返回类型为Object。 而在代码片段2中,对于list2,编译器不能对List?的类型参数作出足够严密的推理,以确定将Integer 传递给List?类型对象的add()方法是类型安全的,所以编译器将不允许这么做,因此编译无法通过。 擦除与泛型规则 擦除 泛型的实现使用了“擦除”机制。擦除(Erasure)是指在泛型代码内部,参数类型将转换为Object等其他类型,因此只能调用Object等类的方法,所有实例类型的相关信息都将消失。 擦除的本质是泛型参数类型以其父类代替,如String、Integer、Double等预定义类型和自定义类型都变成了Object类型。实际上在使用的时候还是进行了带强制类型的转化,只不过这是比较安全的类型转换,因为在编译阶段已经确保了数据类型的一致性。 Java之所以采取擦除的策略主要目的是为了兼容Java SE 1.5以前的应用。 擦除与泛型规则 擦除 泛型擦除的基本原则如下: (1) 所有泛型化的集合类都被擦除成非泛型化的:如ListE、ListListE都被擦除成List; (2) 所有泛型化数组都被擦除成非泛型化的数组:如ListE[],被擦除成List[]; (3) 非泛型化的集合类,将被擦除成其自身:如List 被擦除成List; (4) 原生类型将擦除成它们自身:如String被擦除成String; (5) 无限制的参数类型E,被擦除成Object; (6) 所有带约束限制的参数如? Extends E、X extends E都被擦除成E; (7) 如果有多个约束类型,将擦除成第一个:如T extends Object E,则擦除成Object。 擦除与泛型规则 擦除 ListString listStr = new ArrayListString(); listStr.add(Hello ); listStr.add(Java); String str = listStr.get(0) + listStr.get(1); List listStr = new ArrayList(); listStr.add(Hello ); listStr.add(Java); String str = (String)listStr.get(0) + (String)listStr.get(1); 擦除与泛型规则 擦除 public class GenericErasureT { private T obj; public GenericErasure(T obj) { this.obj=obj; } ……} public class GenericErasure{ private Object obj; public GenericErasure(Object obj) { this.obj=obj; } ……} 擦除与泛型规则 泛型规则 泛型规则 : (1) 泛型的类型参数可以是类或接口(包括自定义类); (2) 同一种泛型可以对应多个版本(因为具体类型是不确定的),不同版本的泛型类实例是不兼容的,如List类可以有ListInteger、ListString、ListObject等版本,但是它们的实例不能进行强制转换; (3) 泛型的类型参数可以有多个,如可以定义形式如ClassNameA,B,C的泛型类; (4) 泛型的类型参数可以使用extends关键字,例如ClassNameT extends superclass,习惯上称之为“有界类型”; (5) 泛型的参数类型还可以是通配符类型
您可能关注的文档
- Java2程序设计基础(第2版)实验指导 第2章基本数据类型.pptx
- windows2003配置WEB服务、FTP服务、DNS和DHCP服务器 课件.ppt
- C语言程序设计教程与实验_第2章 基本数据类型、运算符与表达式.ppt
- 第十章 web服务(课件).ppt
- 教育学电子教案1.ppt
- 系列实验30_植物向性运动及生长素极性运输的实验设计思路.ppt
- [教育学]国际物流试讲教案.ppt
- 数学建模-线性规划理论及模型【已看】.ppt
- [教育学]2004级《电视编导与制作》教案第 2 章-电视节目的选题、构思与脚本创作.ppt
- 产品手册(汉邦全系列产品).pptx
- 2025年交管12123学法减分考试试卷及答案【名校卷】.docx
- 2025年交管12123学法减分考试试卷及完整答案(典优).docx
- 2025年交管12123学法减分考试试卷及完整答案【易错题】.docx
- 2025年交管12123学法减分考试试卷及完整答案【夺冠系列】.docx
- 2025年交管12123学法减分考试试卷及完整答案(历年真题).docx
- 2025年交管12123学法减分考试试卷及完整答案【历年真题】.docx
- 2025年交管12123学法减分考试试卷及参考答案【精练】.docx
- 2025年交管12123学法减分考试试卷及完整答案【历年真题】.docx
- 2025年交管12123学法减分考试试卷及完整答案(考点梳理).docx
- 2025年交管12123学法减分考试试卷及参考答案(a卷).docx
最近下载
- 2025年必威体育精装版劳动合同法全文.docx VIP
- 必威体育精装版劳动合同必威体育精装版劳动合同法全文完整版2025 .pdf VIP
- 库存的浪费培训.pptx VIP
- 电工基础(中职)完整版教学课件.pptx VIP
- 人教版四年级数学上册全册精品课件全套PPT课件.ppt VIP
- 供应链餐饮创业计划书.docx VIP
- 2025年山西中考历史试卷真题解读及答案讲解课件.pdf
- 2010-2023历年河南省安阳一中高一下学期第二次阶段测试化学试卷(带解析).docx VIP
- 国家开放大学《创业基础》复习试卷及答案解析(2024年).docx
- 四川广元地形地貌及其成因(第四系)介绍.doc VIP
文档评论(0)