java - 继承指定Type的泛型类时会发生Type Erasure吗?

标签 java generics

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

但是如果我使用会发生什么

class FooList extends List<Foo>

?
是我的FooList Foo 列表或 Object 的列表在编译时?

最佳答案

注意几点很重要:

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

    公共(public)课主要{

    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
       };
    }
    

关于java - 继承指定Type的泛型类时会发生Type Erasure吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54345065/

相关文章:

java - Java中如何调用泛型类型的方法?

java - Android:使用循环用图像 ID 填充数组

java - 我们可以将文本区域中的数据保存到文本文件中吗?

java - 带有美元符号和数字 .class 的 java 文件名是什么意思 (name$1.class)?

haskell - 这个 GHC.Generic 函数签名错误消息是什么意思?

java - 删除 - 编译后的通用类型信息

generics - 如何推断 for-generate block 中的变量名称?

java - 在对象构造期间向 ArrayList 添加元素的最佳实践?

java - 如何在 Blackberry 7.1 中设置背景图像

swift - 创建不安全通用指针时出现语法错误(无法推断通用参数 'Pointee')