Java efficace offre 2 modi per implementare swap
:
// Two possible declarations for the swap method
public static <E> void swap(List<E> list, int i, int j);
public static void swap(List<?> list, int i, int j);
Quindi, Mr. Bloch dice:
Which of these two declarations is preferable, and why? In a public API, the second is better because it's simpler. You pass in a list—any list—and the method swaps the indexed elements. There is no type parameter to worry about. As a rule, if a type parameter appears only once in a method declaration, replace it with a wildcard.
Sembra che sia possibile utilizzare swapNoWildCard
anziché il metodo swap
e swapHelper
. Mr. Bloch spiega il ragionamento per usare la seconda firma sopra.
public static <E> void swapNoWildcard(List<E> list, int i, int j) {
E e = list.set(j, list.get(i));
list.set(i, e);
}
public static void swap(List<?> list, int i, int j) {
swapHelper(list, i, j);
}
private static <E> void swapHelper(List<E> list, int i, int j) {
E e = list.set(j, list.get(i));
list.set(i, e);
}
Tuttavia, questo è discutibile dato che swapNoWildCard
è quasi la metà del numero di righe di codice rispetto all'implementazione degli altri 2 metodi?
Perché è così utile non specificare il parametro type?