閱讀一些openjdk7的代碼,我已經找到方法Collections.reverse爲實現(我已經刪除了RandomAccess的列出了一些優化):爲什麼openjdk使用不安全的構造?
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兩個初始化產生unchecked警告(沒有@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的使用使用原始類型的不安全的代碼?
- 爲什麼警告不被抑制?
相信點有避免必須命名類型的變量。 –