Listenin hiç kopyası yok, listeye yalnızca referansın bir kopyası var. Son anahtar kelime önemli değil. Bununla birlikte, ham tipin kullanılması önemlidir. parametre yerine kullanılacak olması halinde, derleyici bir hata rapor verecek:
public static void swap(List<?> list, int i, int j) {
// ERROR: The method set(int, capture#3-of ?) in the type List<capture#3-of ?>
// is not applicable for the arguments (int, capture#4-of ?)
list.set(i, list.set(j, list.get(i)));
}
Bunun anlamı, onlar jenerik eksikliklerini aşmak için ara değişken kullanıyorsanız ve hata mesajı kurtulmak için söyledi.
İlginç olan soru: Neden genel bir yöntem kullanmıyorlar? Aşağıdaki kod çalışır:
public static <T> void swap(List<T> list, int i, int j) {
list.set(i, list.set(j, list.get(i)));
}
cevabı, bu yöntem eski kodda uyarılar çiğ türleriyle yöntemi çağrılırken ürettiğini: http:/
List list = ...;
// WARNING: Type safety: Unchecked invocation swap2(List, int, int)
// of the generic method swap2(List<T>, int, int) of type Swap
Collections.swap(list, 0, 1);
İşte ilgilenen herkes için Grepcode üzerinde ilgili kaynak var /grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Collections.java#Collections.swap%28java.util.List%2Cint%2Cint%29 –
Nelerdir? downvote ile? –