java也在用户定义的泛型类中实现类型擦除吗?

Mad*_*hik 1 java generics compilation type-erasure

假设我有一个类,我想在某处使用它作为泛型类型:

class MyList<T>
{
    T[] list=T[10];

    public void add(T element)
    { 
        list[0]=element;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译之后,是否会删除类型信息,就像通用集合一样?

我不需要在任何地方使用此代码,因此请不要专注于发现错误.我只是想通过这个代码提出一个一般性问题,在编译之后将列出实例变量类型为Object类.

aka*_*ppa 8

是的,是的.

另请注意:

  1. 类的类型参数必须与其主体中的泛型类型匹配
  2. 您无法创建通用数组,但可以声明它.其背后的基本原理是,允许构造通用数组会使java不再是类型安全的.请改用arraylist.


cle*_*tus 5

我甚至不确定是否会编译.它应该至少提供一个警告.

这里的问题是数组是协变的.泛型不是.这意味着泛型不会在运行时保留类型信息.数组做.

是的,这适用于所有泛型类型,包括用户定义的类型.