If a type parameter appears only once in a method declaration, replace it with a wildcard.
For example, given a static method swapping 2 items in a list, prefer
public static void swap(List<?> list, int i, int j);over
public static <E> void swap(List<E> list, int i, int j);However, this implementation won't compile:
public static void swap(List<?> list, int i, int j) { list.set(i, list.set(j, list.get(i))); }because you can’t put any value except null into a List<?>. Instead, we will have to use:
public static void swap(List<?> list, int i, int j) { swapHelper(list, i, j); } // Private helper method for wildcard capture private static <E> void swapHelper(List<E> list, int i, int j) { list.set(i, list.set(j, list.get(i))); }