JavaSE 泛型
1. 泛型定义
Java 语言允许在类或接口的定义中,用一个占位符替代实际的类类型。这个技术称为泛型(generic)。通过使用泛型,可以定义一个类,其对象的数据类型由类的使用者在以后确定。
通过使用泛型技术,定义时,不需要指明具体的数据类型,而是使用泛型数据类型替代实际的数据类型,从而定义一个泛型类(generic class)。当使用这个类创建实例时,再根据实际情况选择具体的数据类型。
为了在定义接口或类时建立泛型,可以在定义首行的接口名或类名的后面,写一个
2. 泛型接口
- 接口类如下:
public interface Pairable<T>
{
public T getFirst();
public T getSecond();
}
为实现这个接口类,则开头写为:
public class OrderedPair<T> implements Pairable<T>
3. 泛型类
在泛型类中,继承了接口后,对于私有域中的数据类型、构造方法的两个参数的数据类型、方法 getFirst 和 getSecond 的返回类型,均为 泛型T。
T 可以是数据与、方法参数及局部变量的数据类型,也可以是方法的返回类型。
例如,创建 String 对象的实例,可以写如下语句:
OrderedPair<String> fruit = new OrderedPair<>("apple","banana");
现在,OrderedPair 定义中作为数据类型出现的 T ,都将使用 String 替代。
4. 泛型方法
假定有一个类,在它的头部没有定义类型参数,但在这个类的方法中需要使用泛型数据类型。编写泛型方法(generic method)的步骤如下:
- 在尖括号中写上类型参数,放在方法头部返回类型的前面。
- 在方法内使用类型参数,如同在一般类中的使用,即,或作为返回类型、方法参数的数据类型,或作为方法体内变量的数据类型。
具体写法如下:
// 泛型方法
public static <T> void displayArray(T[] anArray) {...}
// 方法实现
String[] stringArray = {"apple","banana"};
displayArray(stringArray);
在泛型方法中的参数也是泛型,因此在实现泛型方法时直接使用定义好的参数即可。