前言
在日常的开发中,我们会看到别人的框架很多地方会使用到泛型,泛型是 Java SE 1.5
的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。泛型的类型参数只能是类类型(包括自定义类),不能是简单类型
泛型类定义及使用
使用泛型有什么好处呢?首先我们先看一个例子,假设我们有两个类
public class StringClass {
private String x ;
private String y ;
// ......省略get/set
}
public class IntClass {
private int x ;
private int y ;
// ......省略get/set
}
他们除了变量类型不一样,一个是 String
一个是 int
以外,其它并没有什么区别!那我们能不能合并成一个呢?通过泛型就可以解决,首先看一下泛型的类是怎么定义的
public class ObjClass<T> {
private T x ;
private T y ;
// ......省略get/set
}
泛型类定义及使用
- 首先需要定义泛型类:
ObjClass
即在类名后面加一个尖括号,括号里是一个大写字母。这里写的是T
,其实这个字母可以是任何大写字母,无论使用哪个字母,意义都是相同的 - 在类中使用泛型:这个
T
表示派生自Object
类的任何类,比如String,Integer,Double
等 等。这里要注意的是,T
一定是派生于Object
类的 - 泛型类的使用
public static void main(String[] args) {
ObjClass<String> stringClass = new ObjClass<>();
stringClass.setX("haha");
ObjClass<Integer> intClass = new ObjClass<Integer>();
intClass.setX(100);
}
泛型类的构造器则需要在类名后添加上一对尖括号,中间写上要传入的类型。尖括号中,你传进去的是什么,T
就代表什么类型。这就是泛型的最大作用,我们只需要考虑逻辑实现,就能拿给各种类来用
泛型变量定义
- 多泛型变量定义:我们不止可以在类中设置一个泛型变量
T
,还可以声明多个泛型变量,写法如下
public class ObjClass<T, U>
如果还有多个,依然使用逗号分隔开即可,则我们前面定义的泛型类就会变成下面这样
public class ObjClass<T,U> {
<