擦除机制
如下代码:
class Demo1 <T>{
private T[] array = (T[])new Object[6];
public void setArray(T str, int pos){
this.array[pos] = str;
}
public T getArray(int pos){
return this.array[pos];
}
}
public class Test{
public static void main(String[] args){
Demo1<String> demo1 = new Demo1<>();
demo1.setArray("China",0);
System.out.println(demo1.getArray(0));
}
}
在终端通过javap -c 字节码文件 可以观察到如下结果:

所有的 T类型,在编译阶段全部被换成了Object类型(在运行期间没有泛型机制),这便是擦除机制<
本文探讨了Java中的泛型擦除机制,解释了为何在编译阶段泛型类型会被替换为Object。通过示例展示了由于类型安全问题,直接使用Object数组会引发类型转换异常。同时,文章介绍了泛型的上界约束,如何通过反射来创建指定类型的数组,并给出一个找到数组最大值的泛型类实例。此外,还讨论了如何定义一个泛型类,要求传入的类型必须实现Comparable接口。
订阅专栏 解锁全文
636

被折叠的 条评论
为什么被折叠?



