Java笔记——Java的泛型实现

一、Java泛型

面向对象的一个重要目标是对代码重用的支待。支持这个目标的一个重要的机制就是泛型机制。如果除去对象的基本类型外,实现方法是相同的,那么我们就可以用泛型实现(generic implementation) 来描述这种基本的功能。例如,可以编写一个方法,将由一些
项组成的数组排序;方法的逻辑关系与被排序的对象的类型尤关,此时可以使用泛型方法。

二、Pre-Java5泛型的实现

2.1 引用类型的泛型实现

引用类型的一种实现方式是依赖于Object这个超类,其中需要使用到转型(Cast),利用Object中自带的方法来实现我们想要的泛型方法。但是这种方法也存在很大的缺陷,主要体现在:Object自带的基本方法并不能满足我们的需求,很多时候需要用到我们自己编写的方法。总结一句话就是:使用Object超类再强制向下转型。

2.2 基本类型的泛型实现

基本类型的泛型实现依赖于包装类,将基本类型转化成其对应的包装类,而包装类可以像引用类型一样,通过Object来实现泛型。

2.3 使用接口

使用接口来实现泛型主要是为了解决2.1中提到的Object自带方法不能满足需求的问题。例如在进行大小比较的时候,使用comparable接口就比较合适。这种方法对于引用类型和包装类都是通用的。

三、After-Java5的泛型实现

3.1 声明一个泛型类

当指定一个泛型类时,类的声明则包含一个或多个类型参数,这些参数被放在类名后面的一对尖括号内。

3.2声明一个泛型接口

在Java 5 以前, Comparable 接口不是泛型的,而它的compareTo 方法需要一个Obje吐作为参数。于是,传递到compareTo 方法的任何引用变量即使不是一个合理的类型也都会编译,而只是在运行时报告ClassCastException错误。Java 5 中,Comparable 接口是泛型的,例如,现在String 类实现Comparable < String> 并有一个compareTo方法,这个方法以一个String 作为其参数。通过使类变成泛型类,以前只有在运行时才能报告的许多错误如今变成了编译时的错误。

3.3 自动装箱和拆箱

举个例子,如果一个int 型被传递到需要一个Integer 对象的地方,那么,编译器将在幕后插入一个对Integer 构造方法的调用。这就叫作自动装箱。而如果一个integer 对象被放到需要int的地方,则编译器将在幕后插入一个对intValue 方法的调用,这就叫作自动拆箱.因为3.1和3.2主要针对的还是引用类型和包装类型,但是有了自动装箱和拆箱,我们可以省去包装类中很多多余的操作

四、Java数组的协变性

在某些情况下,即使某个对象不是数组的基类型,我们也可以把它赋值给数组元素。这种属性叫做协变(covariance)。协变存在着利与弊,需要合理使用。好处:例如方便将不同的数组作为函数参数进行调用。值得注意的是协变性只有数组才有。Java的泛型是不具有协变性的,但是可以使用通配符使得泛型具有协变性,从而可以传入数组。

全部评论

相关推荐

07-24 12:30
湘潭大学 营销
点赞 评论 收藏
分享
07-23 12:04
门头沟学院 Java
现在是很缺人吗
码农索隆:缺分母,不缺分子,这样好作为炫耀的资本
点赞 评论 收藏
分享
机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务