一、泛型中的擦出现象
1.什么是擦出现象?见下例:
1 import java.util.ArrayList; 2 3 4 public class EraseTypeEquivalence { 5 public static void main(String[]args) { 6 Class c1 = new ArrayList<String>().getClass(); 7 Class c2 = new ArrayList<Integer>().getClass(); 8 9 System.out.println(c1 == c2); 10 } 11 }
结果如下:
居然是true, 首先联系一点,每种对象Class,都只会在java虚拟机中创建其类型的一个Class类,用于创建其他对象,
而这里虽然泛型用的参数类型不同,但是它本质上面还是ArrayList的Class对象,所以两个是一样的。 所以是true
上面这种情况,就是所谓的泛型擦除现象。
泛型内部,无法获得任何有关泛型参数的信息。也就是虽然对象传递的时候有差别,但是进入到泛型容器中后对容器来说他们的类型信息就没有了, 都被认为是“无类型之分”了。
时间: 2024-10-10 23:22:01