1. 什么是泛型?
泛型就是能广泛适用的类型。将类型当作参数传递给一个类或者是方法。
2. 类型擦除 :
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉。
Java泛型依赖编译器实现,只存在于编译期,JVM中没有泛型的概念;那么,编译器做了什么工作呢?
(1)set方法是编译期检查;
(2)get方法的返回值进行转型,编译器插入了一个checkcast语句。
List l1 = new ArrayList();
List l2 = new ArrayList();
System.out.println(l1.getClass() == l2.getClass());
打印的结果为 true 。是因为 List 和 List 在 jvm 中的 Class 都是 List.class。
不可强转的类型
List 能否转为 List
泛型有向上转型与向下转型。向上转会丢失 String 类型特有身份,需要向下转型时,你的程序必须知道对象将转为何种具体类型,不然这是一个不安全的操作。
PS :泛型类或者泛型方法中,不接受 8 种基本数据类型。