欢迎来到天天文库
浏览记录
ID:26449185
大小:70.50 KB
页数:15页
时间:2018-11-27
《java 范型攻略篇》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在已发布的Java1.4中在核心代码库中增加了许多新的API(如Loging,正则表达式,NIO)等,在最新发布的JDK1.5和即将发布的JDK1.6中也新增了许多API,其中比较有重大意义的就是Generics(范型)。 一.什么是Generics? Generics可以称之为参数类型(parameterizedtypes),由编译器来验证从客户端将一种类型传送给某一对象的机制。如Java.util.ArrayList,编译器可以用Generics来保证类型安全。 在我们深入了解Generics之前,我们先来看一看当前的java集合框架(Collection)。在j2SE1.4中所
2、有集合的RootInterface是Collection Collectionsexamplewithoutgenericity:Example11protectedvoidcollectionsExample(){2 ArrayListlist=newArrayList();3 list.add(newString("teststring"));4 list.add(newInteger(9));//purposelyplacedheretocreatearuntimeClassCastException5 inspectCollection(list);6}789protectedv
3、oidinspectCollection(CollectionaCollection){10 Iteratori=aCollection.iterator();11 while(i.hasNext()){12 Stringelement=(String)i.next();13 }14} 以上的样例程序包含的两个方法,collectionExample方法建立了一个简单的集合类型ArrayList,并在ArrayList中增加了一个String和一个Integer对象.而在inspecCollection方法中,我们迭代这个ArrayList用String进行Cast。我们看第二个方法,
4、就出现了一个问题,Collection在内部用的是Object,而我们要取出Collection中的对象时,需要进行Cast,那么开发者必需用实际的类型进行Cast,像这种向下造型,编译器无 法进行检查,如此一来我们就要冒在代码在运行抛出ClassCastException的危险。我们看inspecCollection方法,编译时没有问题,但在运行时就会抛出ClassCastException异常。所以我们一定要远离这个重大的运行时错误 二.使用Generics 从上一章节中的CassCastException这种异常,我们期望在代码编译时就能够捕捉到,下面我们使用范型修改上一章的样
5、例程序。 //Example21protectedvoidcollectionsExample(){2 ArrayListlist=newArrayList();3 list.add(newString("teststring"));4 //list.add(newInteger(9));thisnolongercompiles5 inspectCollection(list);6}789protectedvoidinspectCollection(CollectionaCollection){10 Iteratori=aC
6、ollection.iterator();11 while(i.hasNext()){12 Stringelement=i.next();13 }14} 从上面第2行我们在创建ArrayList时使用了新语法,在JDK1.5中所有的Collection都加入了Generics的声明。例: //Example31publicclassArrayListextendsAbstractList{2 //detailsomitted...3 publicvoidadd(Eelement){4 //detailsomitted5 }6 publicIteratoritera
7、tor(){7 //detailsomitted8 }9} 这个E是一个类型变量,并没有对它进行具体类型的定义,它只是在定义ArrayList时的类型占位符,在Example2中的我们在定义ArrayList的实例时用String绑定在E上,当我们用add(Eelement)方法向ArrayList中增加对象时,那么就像下面的写法一样:publicvoidadd(Stringelement);因为在ArrayList
此文档下载收益归作者所有