java类如何保存关于泛型类型的信息?
正如我正确理解的那样,java执行类型擦除,其中java类如何保存关于泛型类型的信息?,java,generics,Java,Generics,正如我正确理解的那样,java执行类型擦除,其中Tin class Test<T>{ private T something; } 类测试{ 私人的东西; } 成为目标。然而,为什么在本例中: class Test<T>{ private Object[] arr; private int index = 0; Test(){ arr = new Object[10];) public void put(T el) {
T
in
class Test<T>{
private T something;
}
类测试{
私人的东西;
}
成为目标。然而,为什么在本例中:
class Test<T>{
private Object[] arr;
private int index = 0;
Test(){ arr = new Object[10];)
public void put(T el) {
arr[index++] = el;
}
}
Test<String> test = new Test();
test.put(10)
类测试{
私有对象[]arr;
私有整数指数=0;
Test(){arr=新对象[10];)
公开作废认沽权证(TEL){
arr[index++]=el;
}
}
测试=新测试();
测试结果(10)
触发编译错误并要求参数为字符串,当编译期间
T
变为Object
?编译后T
擦除为Object
(在这种情况下,因为模板参数T
没有上限)。在编译过程中,检测到无效代码,并发生编译时错误
否则整个机制将完全无用,如果它实际上一直都是
对象,为什么要使用T
?因为这就是擦除的类型:在编译时检查并验证T,然后擦除。test.put(10)
->您编写10
的方式意味着它是整数,您测试只接受字符串。编译后,T
不会成为对象
。因此,在编译和检查整个代码后会发生类型擦除。谢谢