Java集合和泛型.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一. 泛型概念的提出(为什么需要泛型)?首先,我们看下下面这段简短的代码: 1publicclass GenericTest { 2 3publicstaticvoid main(String[] args) { 4 List list = new ArrayList(); 5 list.add(qqyumidi); 6 list.add(corn); 7 list.add(100); 8 9for (int i = 0; i list.size(); i++) {10 String name = (String) list.get(i); // 111 System.out.println(name: + name);12 }13 }14 }定义了一个List类型的集合,先向其中加入了两个字符串类型的值,随后加入一个Integer类型的值。这是完全允许的,因为此时list默认的类型为Object类型。在之后的循环中,由于忘记了之前在list中也加入了Integer类型的值或其他编码原因,很容易出现类似于//1中的错误。因为编译阶段正常,而运行时会出现“java.lang.ClassCastException”异常。因此,导致此类错误编码过程中不易发现。?在如上的编码过程中,我们发现主要存在两个问题:1.当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。2.因此,//1处取出集合元素时需要人为的强制类型转化到具体的目标类型,且很容易出现“java.lang.ClassCastException”异常。那么有没有什么办法可以使集合能够记住集合内元素各类型,且能够达到只要编译时不出现问题,运行时就不会出现“java.lang.ClassCastException”异常呢?答案就是使用泛型。?二.什么是泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。?看着好像有点复杂,首先我们看下上面那个例子采用泛型的写法。 1publicclass GenericTest { 2 3publicstaticvoid main(String[] args) { 4/* 5 List list = new ArrayList(); 6 list.add(qqyumidi); 7 list.add(corn); 8 list.add(100); 9*/1011 ListString list = new ArrayListString();12 list.add(qqyumidi);13 list.add(corn);14//list.add(100); // 1 提示编译错误1516for (int i = 0; i list.size(); i++) {17 String name = list.get(i); // 218 System.out.println(name: + name);19 }20 }21 }采用泛型写法后,在//1处想加入一个Integer类型的对象时会出现编译错误,通过ListString,直接限定了list集合中只能含有String类型的元素,从而在//2处无须进行强制类型转换,因为此时,集合能够记住元素的类型信息,编译器已经能够确认它是String类型了。结合上面的泛型定义,我们知道在ListString中,String是类型实参,也就是说,相应的List接口中肯定含有类型形参。且get()方法的返回结果也直接是此形参类型(也就是对应的传入的类型实参)。下面就来看看List接口的的具体定义: 1publicinterface ListE extends CollectionE { 2 3int size(); 4 5boolean isEmpty(); 6 7boolean contains(Object o); 8 9 IteratorE iterator();1011 Object[] toArray();1213 T T[] toArr

文档评论(0)

502992 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档