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

时间:2009-06-10 11:46:17

标签: java generics compilation type-erasure

假设我有一个班级 我想在某处使用它作为通用类型:

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

    public void add(T element)
    { 
        list[0]=element;
    }
}

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

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

2 个答案:

答案 0 :(得分:8)

Yes ,couse。

另请注意:

  1. 类的类型参数必须与其正文中的泛型类型匹配
  2. You can't create a generic array,但您可以声明它。其背后的理由是allowing construction of generic arrays would make java not type-safe anymore。请改用arraylist。

答案 1 :(得分:5)

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

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

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