泛型及其应用

上传人:zhan****gclb 文档编号:81602398 上传时间:2022-04-27 格式:DOCX 页数:6 大小:15.35KB
收藏 版权申诉 举报 下载
泛型及其应用_第1页
第1页 / 共6页
泛型及其应用_第2页
第2页 / 共6页
泛型及其应用_第3页
第3页 / 共6页
资源描述:

《泛型及其应用》由会员分享,可在线阅读,更多相关《泛型及其应用(6页珍藏版)》请在装配图网上搜索。

1、泛型及其应用论文导读:Java是当今时代很流行的开发语言,泛型是在JDK5.0中提出来的,泛型为开发者提供了一种高性能的编程方式,能够提高代码的重用性,并允许开发者编写非常优雅的解决方案。那么什么是泛型,如何来使用泛型呢?下面就为什么需要泛型和泛型的应用进行论述说明。关键词:泛型,应用Java是当今时代很流行的开发语言,泛型是在JDK5.0中提出来的,泛型为开发者提供了一种高性能的编程方式,能够提高代码的重用性,并允许开发者编写非常优雅的解决方案。本文将围绕泛型的相关知识进行论述。关键词Java 泛型新特性引言泛型为开发者提供了一种高性能的编程方式,能够提高代码的重用性,可以使用它来增大Jav

2、a类型系统。那么什么是泛型,如何来使用泛型呢?下面就为什么需要泛型和泛型的应用进行论述说明。为什么需要泛型在JDK1.5以前,我们在编写Java程序的时候,有一个很容易引起问题的地方:我们经常需要不断地进行向下转型操作,将某个对象向下造型成更加具体的对象,例如,我们从集合中取出对象的时候,它的类型是Object类型,为了正确使用从中取出的这些对象,我们必须对它们进行向下造型,让它们“显示出庐山真面目”,这样我们才可以正确的调用这些对象上的方法。我们来看下面这个代码片段:Hashtablestudents = new Hashtable();students.put(newInteger(100

3、),”张三”);Stringname = (String)students.get(new Integer(100);System.out.println(name);这个代码片段中,我们首先将一个String类型数据放到了Hashtable中,而当我们从中取出它的时候,因为get()方法返回的是一个Object类型的对象,所以要正确的使用它,我们必须先将取出来的结果进行向下造型。这不仅使得我们的代码变得冗余,而且很容易就会出现造型异常(ClassCastException)。在JDK5.0中,提供了类似于C+中的模板概念的“泛型”,即所谓的Generictype或者generice,可以使用

4、它来增大Java类型系统。可以将泛型类型看做是类型“函数” :它们通过类型变量进行参数化,这些类型变量可以根据上下文用各种类型参数进行实例化。使用泛型在JDK5.0中,所有的集合类都使用泛型进行了重写,使得这些集合类均支持泛型。如果使用泛型,可以将上面的代码改为如下的格式Hashtable students = newHashtable();students.put(newInteger(100),”张三”);Stringname = students.get(new Integer(100);System.out.println(name);通过这种方式,就解决了上面提到的进行造型的问题。为

5、什么Hashtable可以使用这种方式来存期数据呢?这是因为,在JDK5.0中,所有的集合类都实现了泛型,例如,Hashtable的定义如下:public classHashtable/Enumerationelements()/V get(Object o)/Enumerationkeys()/Void put(K key,Vvalue)/V remove(Objectkey)/其实,在某种程度上可以将泛型理解成“占位符”:在定义的地方,用一个”来表示某个值,这个值的类型未知(当然值也是未知),而在后面所有用到”的地方,表示的都是和前面定义的地方表示的是同一个东西。泛型应用除了JDK中泛型化

6、了的相关类外,我们也可以自己定义一个泛型类型,下面我们来看一个例子。源代码:MyGenerics.javapublicclass MyGenericsprivateT filed;publicvoid setField(T f)this.field = f;/获得f的类型System.out.println(f.getClass();public T getField()returnthis.field;在这里我们定义了一个泛型类MyGenerics,用来声明了一个类型参数,然后,在类中定义了一个T类型的属性field,并且定义了相应的setter/getter方法,在setField()方法

7、中,我们使用getClass()方法将f的类型取出来,它将返回一个Class类型的对象,表示f所对应的类。然后我们就可以在程序中使用这个泛型类了。源代码:TestGenerics.javapublic class TestGenericspublic static void main(String args)MyGenerics g1 = newMyGenerics();g1.setField(“Hello”);MyGenerics g2 = newMyGenerics();/这里用到了自动装箱g2.setField(200);在这个程序中,我们首先定义了一个MyGenerics类型的变量g1

8、,然后调用setField() 方法,并且传递给它一个String类型的参数,因此此处相当于调用了一个setField(Strings)的方法。然后我们又定义了一个MyGenerics类型的变量g2,并且在这个对象上调用了setField()方法,此处用到了JDK5.0中新增的自动装箱的功能,相当于调用了一个setField(Integeri)的方法。编译并运行这个程序,可以得到如下的输出:classjava.lang.Stringclassjava.lang.Integer通过泛型,我们可以方便的定义一个类,让它能够适应不同类型的数据,但是,和使用Object类型作为参数不一样的是,在进行操作的时候,可以不用考虑造型的问题。但是需要注意的是,在上面的程序TestGenerics.java中,虽然g1和g2类型好像来自同一个类(MyGenerics),但是,实际上它们的类型是不同的,也就是说,不能使用“g1=g2;“的方式来相互赋值,否则,将会发生类型不匹配的错误。参考文献1. (美)特尼博姆 等著;辛春生 等译分布式系统原理与范型(第2版)清华大学出版社2.Java学习笔记良葛格著;清华大学出版社出版

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!