Java集合的泛型
在JDK5开始时引入了泛型的概念,它有助于把ClassCastException运行时异常转变为编译时类型不兼容错误。
在JDK5开始,所有Java集合都采用了泛型机制。在声明集合变量和创建集合对象时,可以用“<>”指定集合中元素的类型:
List<String> list = new ArrayList<String>();//列表中元素必须为String类型
定义泛型类和泛型接口
泛型类
public class Bag<T> {
private T content;
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
public Bag(T content) {
this.content = content;
}
}
public class Test {
public static void main(String[] args) {
Bag<String> bag = new Bag<>("MyBook");
String content = bag.getContent();
}
}
用extends关键字限定类型参数
语法形式为:
<T extends 类名> //T必须是指定类或者其子类
//或者
<T extends 接口名>//T必须是指定接口的实现类
public class LimitBag<T extends Number> {
private T content;
public LimitBag(T content) {
this.content = content;
}
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
}
public class Test {
public static void main(String[] args) {
LimitBag<Integer> bag = new LimitBag<>(12);
Integer content = bag.getContent();
System.out.println(content);
}
}
定义泛型方法
在一个方法中,如果方法的参数或返回值的类型带有“”形式的类型参数,那么这个方法就成为泛型方法。在普通的类或者泛型类中都可以定义反省方法。一个类可以不是泛型类但是有泛型方法,代码如下:
public class MethodTest {
public static <E> void printArray(E[] array) {
for (E e : array) {
System.out.println(e);
}
}
//泛型方法max()
public static <T extends Comparable<T>> T max(T x, T y) {
return x.compareTo(y) > 0 ? x : y;
}
public static void main(String[] args) {
Integer[] intArray = {1, 2, 3, 4};
printArray(intArray);
System.out.println(max(12, 24));
}
}