【发布时间】:2016-03-15 13:57:49
【问题描述】:
我在评论所在的行收到“未经检查的分配:java.util.List 到 java.util.List<java.lang.Integer>”。
将GetList 参数更改为GetList<?> 时清除警告。
我不明白为什么GetList 泛型类型会影响getIntegerList() 的结果。在 Intellij Idea 和 Eclipse 中都试过了。是正常还是警告信息有误?
import java.util.ArrayList;
import java.util.List;
public class GetList<T> {
private final List<Integer> integerList= new ArrayList<Integer>();
public List<Integer> getIntegerList() {
return integerList;
}
}
import java.util.List;
public class Main {
public Main(GetList getList) {
List<Integer> rahan = getList.getIntegerList(); //this line shows the warning above
}
}
【问题讨论】:
-
使用 rawtypes 总是会导致该警告。顺便说一句,您真的需要
GetList类中的<T>参数吗? -
@RaduIonescu 或者它是你的 IDE,因为我可以使用
javac -Xlint:warning重现。 -
@FrancescoPitzalis 这只是一个用于理解问题的 SSCCE。我在其中找到的代码确实使用了泛型。
-
我在 JLS 中找不到此警告的明显原因;然而,正如它在Section 4.8 中所说的那样,“强烈反对在将泛型引入 Java 编程语言之后编写的代码中使用原始类型”;所以很高兴(?)巧合,修复一个警告(通过
-Xlint:rawtypes查看)也修复了手头的警告。 -
@AndyTurner 相关段落是“构造函数的类型(第 8.8 节)、实例方法(第 8.4 节、第 9.4 节)或原始类型 C 的非静态字段(第 8.3 节)不是从其超类或超接口继承的原始类型是对应于在对应于 C 的泛型声明中擦除其类型的原始类型。”所以
GetList<T>.getIntegerList()返回List<Integer>,GetList.getIntegerList()返回List。