我有一个List<String>
字段的课程。如果我为类定义添加了泛型参数,则在访问列表时会发生编译错误。
此代码已成功编译。
package com.test;
import java.util.LinkedList;
import java.util.List;
public class TestClass {
public List<String> strings = new LinkedList<>();
public static void main(String[] args) {
TestClass c = new TestClass();
String name = c.strings.get(0);
}
}
但这不是编译。
package com.test;
import java.util.LinkedList;
import java.util.List;
public class TestClass<E> {
public List<String> strings = new LinkedList<>();
public static void main(String[] args) {
TestClass c = new TestClass();
String name = c.strings.get(0);
}
}
唯一的变化是通用参数E
。但该领域明确定义为List<String>
。它给出了
Error:(11, 36) java: incompatible types: java.lang.Object cannot be converted to java.lang.String
代表String name = c.strings.get(0);
。
虽然可以通过TestClass<?> c = new TestClass();
来解决,但我需要知道确切的问题。
实际上我的问题是为什么Java编译器无法识别原始类型的泛型字段?为什么它会删除与List
无关的E
的泛型类型?我毫不怀疑是否将列表列为List<E>
。