ワイルドカードを持つバージョンが好まれています。それ以外の場合は、List<Number>
印刷します。パラメータのタイプがList<?>
の場合、List
のいずれかが受け入れられることが明らかです。 List
が受け入れられた場合は、型パラメータに名前を付ける理由はないので、<E>
と書くのは面倒です。一方、型パラメータが署名内に2回現れた場合、ワイルドカードは使用できません。たとえば、このシグネチャには型パラメータが必要です。引数が(ワイルドカードなしで3種類のパラメータ、総混乱を持っているだろうことを行うための唯一の方法)タイプList<? extends E>
を持っていた場合
public static <E> List<E> combineLists(List<E> list1, List<E> list2)
は実際にその一例では、それはおそらく良いだろう。
有効なJavaでは、メソッド本体にtypeパラメータが必要な場合でも、ワイルドカードを使用して署名のバージョンを優先し、これを可能にするプライベートヘルパーメソッドを記述することをお勧めします。たとえば、
public static void swapFirstAndLast(List<?> list) {
helper(list);
}
private static <E> void helper(List<E> list) {
int size = list.size();
E e = list.get(0);
list.set(0, list.get(size - 1)); // These lines would not be possible
list.set(size - 1, e); // If the type of list were List<?>
}
簡潔性は、おそらく? – aroth