为什么 java 原始类型会擦除具体化成员的类型 [duplicate]

Why java raw type erase types of concretized members [duplicate]

提问人:Fengtao Ding 提问时间:11/8/2023 最后编辑:Fengtao Ding 更新时间:11/9/2023 访问量:43

问:

给出下面的例子:

import java.util.ArrayList;
import java.util.List;

public class MyTemplate<T> {

    T parameterizedObj;
    List<String> stringList;

    public static void main(String[] args) {
        String a = new MyTemplate().getStringList().get(0);
    }

    public List<String> getStringList() {
        if (stringList == null) {
            stringList = new ArrayList<>();
            stringList.add("Hello");
        }
        return stringList;
    }
}

编译时出现以下错误

/home/***/test/src/main/java/MyTemplate.java:10:56
java: incompatible types: java.lang.Object cannot be converted to java.lang.String

当 MyTemplate 在第 10 行中用作此窗体的原始类型时。new MyTemplate()

我可以理解被擦除为对象的类型。T parameterizedObj

但我不明白为什么被擦除到.由于它已被具体化为 .为什么?List<String> stringListListList<String>

我阅读了文档原始类型和类型擦除,但没有找到答案,我认为他们谈论的是 ,而不是T parameterizedObjList<String> stringList

Java 泛型类型 擦除 原始类型

评论


答: 暂无答案