什么是泛型擦除

简介: 什么是泛型擦除

我们都知道Java的泛型是伪泛型,即编译期间所有的泛型信息都会被擦除,如我们代码定义了:List和List,但是对于JVM而言,看到的只有List,由泛型附加的类型信息对于JVM而言是看不到的。代码说明如下:
1.1 原始类型擦除后相等
public class Test {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
list1.add("abc");
    ArrayList<Integer> list2 = new ArrayList<Integer>();
    list2.add(123);

    System.out.println(list1.getClass() == list2.getClass());
}
AI 代码解读

}
在这个例子中,我们定义了两个ArrayList数组,不过一个是ArrayList泛型类型的,只能存储字符串;一个是ArrayList泛型类型的,只能存储整数,最后,我们通过list1对象和list2对象的getClass()方法获取他们的类的信息,最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下原始类型。
1.2 反射添加的元素被擦除
public static void main(String[] args)
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
ArrayList list = new ArrayList();
list.add(1); //这样调用 add 方法只能存储整形,因为泛型类型的实例为 Integer
list.getClass().getMethod("add", Object.class).invoke(list, "asd");

    for (int i = 0; i < list.size(); i++) {
        // 输出1    asd
        System.out.println(list.get(i));
    }
}
AI 代码解读

如果直接调用add()方法,那么只能存储整数数据,不过当我们利用反射调用add()方法的时候,却可以存储字符串,这说明了Integer泛型实例在编译之后被擦除掉了,只保留了原始类型。

目录
打赏
0
0
0
0
67
分享
相关文章
泛型擦除与多态的冲突与解决方法
泛型擦除与多态的冲突与解决方法
什么是泛型擦除后保留的原始类型
什么是泛型擦除后保留的原始类型
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
240 1
|
10月前
|
Java一分钟之-泛型擦除与类型安全
【5月更文挑战第20天】Java泛型采用类型擦除机制,在编译期间移除泛型信息,但在编译阶段提供类型安全检查。尽管需要类型转换且可能产生警告,但可以通过特定语法避免。使用泛型时应注意自动装箱拆箱影响性能,无界通配符仅允许读取。理解这些特性有助于编写更安全的代码。
105 4
【C++】类和对象④(再谈构造函数:初始化列表,隐式类型转换,缺省值
C++中的隐式类型转换在变量赋值和函数调用中常见,如`double`转`int`。取引用时,须用`const`以防修改临时变量,如`const int& b = a;`。类可以有隐式单参构造,使`A aa2 = 1;`合法,但`explicit`关键字可阻止这种转换。C++11起,成员变量可设默认值,如`int _b1 = 1;`。博客探讨构造函数、初始化列表及编译器优化,关注更多C++特性。
|
9月前
|
JavaSE——面向对象高级三(5/5)-泛型方法、泛型的通配符、泛型擦除和注意事项
JavaSE——面向对象高级三(5/5)-泛型方法、泛型的通配符、泛型擦除和注意事项
42 0
详解Java中的泛型(泛型的语法,擦除机制,泛型的上界)
详解Java中的泛型(泛型的语法,擦除机制,泛型的上界)
136 0
序列化类型为XX的对象时检测到循环引用
序列化类型为XX的对象时检测到循环引用
96 0
辨析Java方法参数中的值传递和引用传递
辨析Java方法参数中的值传递和引用传递
124 0
90%人不懂的泛型局限性,泛型擦除,星投影
通过这篇文章你将学习 Kotlin 和 Java 泛型局限性、泛型擦除,泛型信息被擦除了之后,泛型信息保存到哪里,迷惑的通配符和星投影区别
DHL
220 0
90%人不懂的泛型局限性,泛型擦除,星投影
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等