- 泛型方法
- 泛型类
- 类型通配符
- 泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数
- 我们可以写一个泛型方法来对一个对象数组排序,然后调用该泛型方法对整型数组、浮点数数组、字符串数组等进行排序
- 所有的泛型方法声明都有一个类型参数声明部分(如
<E>
) - 每个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数也被称为一个类型变量,是用来指定一个泛型类型名称的标识符
- 类型参数能被用来声明返回类型,并且能作为泛型方法得到的实际参数类型的占位符
2. 泛型类:public class Box<T>{...}
- 声明泛型类和非泛型类相似,除了在类名后添加类型参数声明部分
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
public static void main(String[] args) {
Box<Integer> integerBox = new Box<Integer>();
Box<String> stringBox = new Box<String>();
integerBox.add(new Integer(10));
stringBox.add(new String("hello"));
System.out.printf("整型值为 :%d\n\n", integerBox.get());
System.out.printf("字符串为 :%s\n", stringBox.get());
}
}
3. 类型通配符
import java.util.*;
public class GenericTest {
public static void main(String[] args) {
List<String> name = new ArrayList<String>();
List<Integer> age = new ArrayList<Integer>();
name.add("icon");
age.add(18);
getData(name);
getData(age);
}
public static void getData(List<?> data) {
System.out.println("data :" + data.get(0));
}
}
- getData()方法的参数是List类型的,所以name、age都可以作为这个方法的实参
List<? extends Number>
限定参数泛型上限为Number,泛型为String不在此范围内List<> super Number>
表示类型只能接受Number及其上层父类类型,如Object类型的实例