我知道在Why does Collections.swap copy the input list?已经提出并回答了类似的问题,但我提出的问题有些不同:
考虑java.util.Collections.swap()
的JDK1.7源代码public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}
显然已经声明了List l别名,因为你无法写入List列表,无论如何我无法理解为什么没有发出使用rawtype(List l)的警告,以及在这样的unchecked中执行set()方式。
对我来说更奇怪的是,如果我在我自己的任何课程中盲目地复制该方法,那么我会得到警告(如我所料),并且必须使用@SuppressWarnings进行注释({“rawtypes”,“unchecked”} )
我在集合类上看不到@SuppressWarnings注释作为一个整体[仅在某些方法上 - 而不是在swap()上)所以我没有解释这种行为。
我错过了一些基本的东西吗?
[我正在使用Eclipse Kepler]
答案 0 :(得分:0)
它只是一个源代码,可能错过了包括@SuppressWarnings。 实际上,如果您使用的是Java编译器1.5或更高版本,则会收到此类警告
答案 1 :(得分:0)
没有为参数化类型分配原始类型;所以没有@SW rawtypes。
没有外卡的铸造;所以没有@SW取消选中。