阅读 openjdk7 的一些代码,我发现方法 Collections.reverse 实现为(我已经删除了对 RandomAccess 列表的一些优化):
public static void reverse(List<?> list) {
int size = list.size();
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i = 0, mid = list.size() >> 1; i < mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
ListIterators 的两个初始化都会生成未经检查的警告(并且代码中没有 @SupressWarnings 注释)。
对我来说,保存和简单的实现方法是:
public static <E> void reverse2(List<E> list) {
int size = list.size();
ListIterator<E> fwd = list.listIterator();
ListIterator<E> rev = list.listIterator(size);
for (int i = 0, mid = list.size() >> 1; i < mid; i++) {
E tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
这是完全安全的。
我的问题是:
- 为什么 openjdk 使用原始类型的不安全代码?
- 为什么警告没有被抑制?