首先创建一些代码(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' _should_只适用于'List'。 –