【发布时间】:2013-10-24 18:27:10
【问题描述】:
首先创建一些代码 (Java 7) 来说明我的问题。
import java.util.*;
class Generics101 {
public static void addTrue(List list) {
list.add(true);
}
public static void main(String[] args) {
List<Integer> testList = new ArrayList<>();
addTrue(testList);
System.out.println(testList.get(0));
// testList.add(true); // will not compile when uncommented
}
}
我有以下两个问题:
在
addTrue方法中,Eclipse 暗示它不喜欢raw types。当我尝试更改方法参数以使用通配符List<?> list时,它不会编译。我浏览了Generics Tutorial,但找不到答案。我在这里遗漏了什么,我应该在哪里阅读?同样的tutorial 声明“Java 语言中引入了泛型以在编译时提供更严格的类型检查...”我知道由于
type erasure这样的强制执行不能在运行时发生,所以我上面的代码编译并运行。如果注释行未注释,它将触发编译错误,因此我假设tighter type checks在同一方法中有效。这种执法的确切范围是什么?它是如何正式定义的?
【问题讨论】:
-
addTrue应该只适用于List<Boolean>。
标签: java list generics type-erasure raw-types