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) {

正如我正确理解的那样,java执行类型擦除,其中
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
不会成为
对象
。因此,在编译和检查整个代码后会发生类型擦除。谢谢