提问人:Fengtao Ding 提问时间:11/8/2023 最后编辑:Fengtao Ding 更新时间:11/9/2023 访问量:43
为什么 java 原始类型会擦除具体化成员的类型 [duplicate]
Why java raw type erase types of concretized members [duplicate]
问:
给出下面的例子:
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> stringList
List
List<String>
我阅读了文档原始类型和类型擦除,但没有找到答案,我认为他们谈论的是 ,而不是T parameterizedObj
List<String> stringList
答: 暂无答案
评论