java奇数编译泛型类和列表错误
因此,当使用一个具有列表(或映射或集合等)属性的泛型类时,我遇到了一个奇怪的编译错误
尝试迭代(使用foreach)列表时发生编译错误:
Sample.java:11: error: incompatible types
for (String string : s.getStringList()) {
required: String
found: Object
我只想说清楚,我知道这个问题有一个简单的解决方法,但我想了解代码的错误所在
以下是我创建的示例:
import java.util.List;
public class Sample<T> {
public List<String> stringList;
public static void main(String[] args) {
Sample s = new Sample();
// Why this doesn't work?
for (String string : s.getStringList()) {
}
// Why does both of the following work?
List<String> newList = s.getStringList();
Sample<Object> s2 = new Sample<>();
for (String string : s2.getStringList()) {
}
}
public List<String> getStringList() {
return stringList;
}
}
# 1 楼答案
这些线
不要工作,因为您正在使用
Sample
类的raw形式。当使用类的原始形式时,类中的所有泛型,甚至不相关的泛型,都会执行类型擦除。这意味着getStringList
现在只返回List
个Object
,而不是List<String>
个String
Java的这一部分是在Java1.5中引入泛型的,因此现在使用泛型的类的旧版本将是向后兼容的。这样一来,在
List
上迭代的东西(之前必须使用Object
)仍然可以通过使用List
的原始形式使用Object
{a1}处理原始类型:
及
(我的)
理由是: