您的位置:首页 > 编程语言 > Java开发

Spring源码阅读-番外一:泛型

2015-07-28 23:42 387 查看
泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是安全简单。

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源码的时候看到,就打算花点心思,学点皮毛。如果有什么认识错误,希望大牛们可以不吝赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: