Spring源码阅读-番外一:泛型
2015-07-28 23:42
387 查看
泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是安全简单。
1. 常见泛型
1.1泛型类/接口
先看下简单的代码,如下:
对Box进行实例化,如下:
对Box类进行改造,如下:
Box类的add方法变化,如下:
1.2泛型方法
对指定方法的参数进行限制方法,代码如下:
2. 定义泛型
通过上面的代码,对泛型有了简单的认识,现在介绍下泛型是如何定义的。
2.1定义泛型类或接口
在类型和接口名称后面加上
这里的继承后面可以是接口,和java的单继承多实现思想一样,写法为
如果是泛型类,其方法就可以使用该泛型,就像我们上面的代码add(T t),可以对该类中所有的方法参数进行限制。
2.1定义泛型方法
在方法返回值前面定义泛型,像上面的代码一样,返回值也可以为泛型。
3. 总结
个人觉得泛型是多态思想一种很好的实现,能够达到多态的效果,也可以对参数进行限制。泛型类和普通类在定义和实例化的时候有区别,就是泛型类在实例化的时候需要确定泛型。
不过刚出来都没有机会写底层代码,泛型的使用例子也是寥寥无几啊,还是学习spring源码的时候看到,就打算花点心思,学点皮毛。如果有什么认识错误,希望大牛们可以不吝赐教。
1. 常见泛型
1.1泛型类/接口
先看下简单的代码,如下:
public class Box<T> { public void add(T t){ } }
对Box进行实例化,如下:
public static void main(String[] args) { Box<String> strBox = new Box<String>(); strBox.add("");// String类型 Box<Object> objBox = new Box<Object>(); objBox.add(1);// Object类型 }
对Box类进行改造,如下:
public class Box<T extends Apple> { public void add(T t){ } }
Box类的add方法变化,如下:
public static void main(String[] args) { Apple apple = new Apple(); Box<Apple> strBox = new Box<Apple>(); strBox.add(apple);// Apple类型 }
1.2泛型方法
对指定方法的参数进行限制方法,代码如下:
public static void main(String[] args) { Apple apple = new Apple(); add(apple); } public static <T extends Apple> void add(T t){ }
2. 定义泛型
通过上面的代码,对泛型有了简单的认识,现在介绍下泛型是如何定义的。
2.1定义泛型类或接口
在类型和接口名称后面加上
<T [ extends Class]>,这个T只是一个名称,可以随意取,后面的
extends Class是可选的,可以根据实际情况添加,但是注意一点不建议继承fianl类,如
<T extends String>等。理由很简单
<T extends String>泛型实例化的时候只能是Stirng,因为final类不能被继承。
这里的继承后面可以是接口,和java的单继承多实现思想一样,写法为
<T extends class & interface01 & interface02>
如果是泛型类,其方法就可以使用该泛型,就像我们上面的代码add(T t),可以对该类中所有的方法参数进行限制。
注意,如果是子类要继承泛型类,那么子类也必须是泛型类。
2.1定义泛型方法
在方法返回值前面定义泛型,像上面的代码一样,返回值也可以为泛型。
3. 总结
个人觉得泛型是多态思想一种很好的实现,能够达到多态的效果,也可以对参数进行限制。泛型类和普通类在定义和实例化的时候有区别,就是泛型类在实例化的时候需要确定泛型。
不过刚出来都没有机会写底层代码,泛型的使用例子也是寥寥无几啊,还是学习spring源码的时候看到,就打算花点心思,学点皮毛。如果有什么认识错误,希望大牛们可以不吝赐教。
相关文章推荐
- struts2的相关练习
- Intellij1.4入门使用(图片创建javaEE工程)
- 解决Eclipse中文乱码
- java前奏及基础语法
- java web 基础知识(二)之jre,jdk,jvm
- Java ArrayList Sort
- struts2.0的实现
- SpringMVC解决返回JSON格式,IE显示保存文件
- java的反射机制原理
- Java集合类图
- Java学习--(二)使用文本文档写java程序
- 代理模式和JDK动态代理
- Mac下eclipse安装SVN插件
- Eclipse:Error:could not find java SE Runtime Environment/Error: could not find java.dll
- 关于在Java学习中遇到的浮躁
- 提高代码性能效率总结(二)--Java
- java.util.Scanner应用详解++扫描控制台输入
- eclipse默认指向WebContent目录修改为webRoot 设置说明
- 0708_Java如何设置输入流
- java基础之“==” 和equals()方法的区别