看了一篇很实用的java泛型文章,个人觉得很实用!!
Java泛型
在Java SE1.5中,增加了一个新的特性:泛型(日本语中的总称型)。何谓泛型呢?通俗的说,就是泛泛的指定对象所操作的类型,而不像常规方式一样使用某种固定的类型去指定。泛型的本质就是将所操作的数据类型参数化,也就是说,该数据类型被指定为一个参数。这种参数类型可以使用在类、接口以及方法定义中。
一、 为什么使用泛型呢?
在以往的J2SE中,没有泛型的情况下,通常是使用Object类型来进行多种类型数据的操作。这个时候操作最多的就是针对该Object进行数据的强制转换,而这种转换是基于开发者对该数据类型明确的情况下进行的(比如将Object型转换为String型)。倘若类型不一致,编译器在编译过程中不会报错,但在运行时会出错。
使用泛型的好处在于,它在编译的时候进行类型安全检查,并且在运行时所有的转换都是强制的,隐式的,大大提高了代码的重用率。
二、 泛型的简单例子:
首先,我们来看看下面两个普通的class定义
public class getString {
private String myStr;
public String getStr() {
return myStr;
}
public void setStr(str) {
myStr = str;
}
}
public class getDouble {
private Double myDou;
public Double getDou() {
return myDou;
}
public void setDou(dou) {
myDou = dou;
}
}
这两个class除了所操作的数据类型不一致,其他机能都是相同的。现在,我们可以使用泛型来将上面两个class合并为一个,从而提高代码利用率,减少代码量。
public class getObj<T> {
private T myObj ;
public T getObj() {
return myObj;
}
public void setObj<T obj> {
myObj = obj;
}
}
那么,使用了泛型后,如何生成这个class的实例来进行操作呢?请看下面的代码:
getObj<String> strObj = new getObj<String>();
strObj.setObj(“Hello Nissay”);
System.out.println(strObj.getObj());
getObj<Double> douObj = new getObj<Double>();
douObj.setObj(new Double(“116023”));
System.out.println(douObj.getObj());
三、 例子分析
现在我们来分析上面那段蓝色字体的代码:
1、<T>是泛型的标记,当然可以使用别的名字,比如。使用<T>声明一个泛型的引用,从而可以在class、方法及接口中使用它进行数据定义,参数传递。
2、<T>在声明的时候相当于一个有意义的数据类型,编译过程中不会发生错误;在实例化时,将其用一个具体的数据类型进行替代,从而就可以满足不用需求。
四、 泛型的规则和限制
通过上述的例子,我们简单理解了泛型的含义。在使用泛型时,请注意其使用规则和限制,如下:
1、泛型的参数类型只能是类(class)类型,而不能是简单类型。
比如,<int>是不可使用的。
2、可以声明多个泛型参数类型,比如<T, P,Q…>,同时还可以嵌套泛型,例如:<List<String>>
3、泛型的参数类型可以使用extends语句,例如<T extends superclass>。
4、泛型的参数类型可以使用super语句,例如< T super childclass>。
5、泛型还可以使用通配符,例如<? extends ArrayList>
五、 扩展
1、extends语句
使用extends语句将限制泛型参数的适用范围。例如:
<T extends collection> ,则表示该泛型参数的使用范围是所有实现了collection接口的calss。如果传入一个<String>则程序编译出错。
2、super语句
super语句的作用与extends一样,都是限制泛型参数的适用范围。区别在于,super是限制泛型参数只能是指定该class的上层父类。
例如<T super List>,表示该泛型参数只能是List和List的上层父类。
3、通配符
使用通配符的目的是为了解决泛型参数被限制死了不能动态根据实例来确定的缺点。
举个例子:public class SampleClass < T extends S> {…}
假如A,B,C,…Z这26个class都实现了S接口。我们使用时需要使用到这26个class类型的泛型参数。那实例化的时候怎么办呢?依次写下
SampleClass<A> a = new SampleClass();
SampleClass<B> a = new SampleClass();
…
SampleClass<Z> a = new SampleClass();
这显然很冗余,还不如使用Object而不使用泛型,呵呵,是吧?
别着急,咱们使用通配符,就OK了。
SampleClass<? Extends S> sc = new SampleClass();
只需要声明一个sc变量,很方便把!
分享到:
相关推荐
java 一个关于泛型的简单例子 java 一个关于泛型的简单例子 java 一个关于泛型的简单例子
JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的...从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。
很实用的泛型讲解,很详细的,泛型学习必备!
各种数据库的链接包 ssh整合需要的包 j2ee 开发长用包集合 以及 struts2.0
完整超详细版 耿祥义 Java大学实用教程(第2版)PPT课件 第05章 继承 接口与泛型 (共104页).ppt 完整超详细版 耿祥义 Java大学实用教程(第2版)PPT课件 第06章 字符串和正则表达式 (共62页).ppt 完整超详细版 ...
从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。 jdk 1.8特色介绍 自动检测设备上的JDK版本 自动查找设备上的JDK安装路径 自动配置JDK对应电脑操作系统的环境...
主要给大家介绍了关于Java泛型初学者之上、下界通配符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者实用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
完整超详细版 耿祥义 Java大学实用教程(第2版)PPT课件 第05章 继承 接口与泛型 (共104页).ppt 完整超详细版 耿祥义 Java大学实用教程(第2版)PPT课件 第06章 字符串和正则表达式 (共62页).ppt 完整超详细版 ...
Java实用课件第5章继承、接口与泛型.ppt
第8章_常用实用类 第9章_组件及事件处理 第10章_输入流与输出流 第11章_JDBC数据库操作 第12章_Java多线程机制 第13章_Java网络编程 第14章_图形图像与音频 第15章_泛型与集合框架 第16章_Java Applet
全书共分12章,重点讲解了类与对象、类的继承、接口的使用、SDK 1.5新推出的泛型、字符串与模式匹配、实用类及数据结构、多线程、输入/输出流、基于SWING的GUI设计、网络编程、Java Applet程序设计等内容。...
全书历经12年多的技术积累与提炼,对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量实用价值极高的示例,可以帮助读者充分理解Java语言以及Java类库的相关特性,使你快速升级到Java SE 6平台,从而提高编程...
全书历经12年多的技术积累与提炼,对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量实用价值极高的示例,可以帮助读者充分理解Java语言以及Java类库的相关特性,使你快速升级到Java SE 6平台,从而提高编程...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。 全书对Java...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...
JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的...从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。
jdk1.6方便别人使用不用从官网上查找,主要用于java开发.JDK Java Development Kit是SunMicrosystems...从SUN的JDK5.0开始提供了泛型等非常实用的功能,其版本也不断更新,此次提供的jdk1.6运行效率得到了非常大的提。
JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK...从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。适合32位操作系统