一、介绍
泛型就是将类型参数化的过程,就是把变量类型当做一个变量。
二、使用
泛型是JDK1.5增加的新特性,泛型有三种使用方式,分别为泛型类、泛型接口、泛型方法。
1.泛型类
class Generic<T> {
private T t;
public Generic(T t) {
this.t = t;
}
}
//使用,jdk1.7之后,支持棱形语法
Generic<Integer> generic1 = new Generic<>(1);
Generic<String> generic2 = new Generic<>("hello");
2.泛型接口
interface Generic<T>{
void setValue(T t);
T getValue();
}
3.泛型方法
public <T> void setValue(T t){
System.out.println(t);
}
三、泛型通配符
1.泛型任意类型(匹配Object及任意类型)
public static void print(List<?> list){
System.out.println(list);
}
//例如
List<String> list = new ArrayList<>();
list.add("hello");
List<Integer> list2 = new ArrayList<>();
list2.add(1);
print(list);
print(list2);
2.泛型上界(T为Number类型或者Number的子类型)
class Generic<T extends Number> {
private T t;
public Generic(T t) {
this.t = t;
}
}
//例如:
Generic<Integer> generic1 = new Generic<>(1);
Generic<Double> generic2 = new Generic<>(1.1);
//这里会发生编译错误
Generic<String> generic3 = new Generic<>("hello");
3.泛型下界(?为String类型或者String的父类)
public static void print(List<? super String> list){
System.out.println(list);
}
四、类型参数命名约定
最常用的类型参数名称是:
- E - Element (Java Collections Framework广泛使用)
- K - Key
- N - Number
- T - Type
- V - Value
- S,U,V etc. - 2nd, 3rd, 4th types
五、总结
1.将运行时可能发生的类型转换错误,提前到编译期检查。
//例如jdk1.5之前没有泛型的情况下
List list = new ArrayList();
list.add(1);
list.add("hello");
//这里会发生类型转换错误,运行时才会发现。
String str = (String) list.get(0);
2.复用代码逻辑.
3.包含任意通配符?,只能get,不能set
网友评论