注意
泛型不能使用在静态属性上
泛型可以用在接口、抽象类、普通类上
泛型方法
泛型方法可以定义在非泛型类中,这个方法可以是静态方法或者成员方法;
public class Method {
//泛型方法,是在返回类型前面加上<>
public static <T> void say(T t){
System.out.println(t);
}
public <T> T test(T x){//有返回值的泛型方法
return x;
}
}
类型擦除(重点)
https://www.jianshu.com/p/36356dba3ee9
List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass());//输出true,因为类型擦除,最终都是Object
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。
code 1:
}
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("name", "hollis");
map.put("age", "22");
System.out.println(map.get("name"));
System.out.println(map.get("age"));
}
反编译后的code 1:
}
public static void main(String[] args) {
Map map = new HashMap();
map.put("name", "hollis");
map.put("age", "22");
System.out.println((String) map.get("name"));
System.out.println((String) map.get("age"));
}
发现泛型都不见了,程序又变回了Java泛型出现之前的写法,泛型类型都变回了原生类型,