继承具有指定Type的泛型类时,是否会发生Type Erasure?

时间:2019-01-24 10:59:49

标签: java generics

当我有List<Foo>字段时,由于类型擦除,它在编译时将变成List

但是如果我使用

会怎样?
class FooList extends List<Foo>


我的FooListFoo的列表还是编译时的Object的列表?

1 个答案:

答案 0 :(得分:0)

重要的是要注意以下几点:

  1. 由于列表是一个类,因此无法从列表中extends,在这种情况下,您应该implements
  2. 在构建项目后,您的字节码(.class文件)应如下所示:public abstract class FooList implements List<Foo>,因此这是Foo的简单列表。
  3. 请注意这种方法,请使用FooList并使用简单的List来查看以下代码:

    公共类主要{

    public static void main(String[] args) {
    
       //works
       List<Foo> foos = new ArrayList<>();
    
       //don't work
       FooList fooList = new ArrayList<>();
       FooList fooList2 = new ArrayList();
    
       //work, but not necessary
       FooList fooList3 = new FooList() {
           //implement all method from List interface
       };
    }
    

    }