から取られたこの一般的なメソッドを検討してくださいEffective Java:
// Generic method
public static <E> Set<E> union(Set<E> s1, Set<E> s2) {
Set<E> result = new HashSet<E>(s1);
result.addAll(s2);
return result;
}
そして、上記の一般的な方法を実行するためのこの方法:
// Simple program to exercise generic method
public static void main(String[] args) {
Set<String> guys = new HashSet<String>(
Arrays.asList("Tom", "Dick", "Harry"));
Set<String> stooges = new HashSet<String>(
Arrays.asList("Larry", "Moe", "Curly"));
Set<String> aflCio = union(guys, stooges); //What does the type parameter help here?
System.out.println(aflCio);
}
型パラメーターを提供しなかった場合、つまり<E>
修飾子と戻り型の間で、型の参照aflCio
をSet<String>
ユニオンメソッドの戻り値に割り当てることはできませんか? ここで私たちを購入する型パラメータは何ですか?
次の段落を理解するのに苦労しています。
ジェネリック メソッドの注目すべき機能の 1 つは、ジェネリック コンストラクターを呼び出すときに型パラメーターの値を明示的に指定する必要がないことです。コンパイラは、メソッドの引数の型を調べて、型パラメーターの値を判断します。上記のプログラムの場合、コンパイラは、union への両方の引数が Set 型であることを認識するため、型パラメーター E が String でなければならないことを認識します。このプロセスは型推論と呼ばれます。
戻り値の型の型パラメーターを として言及していませんかSet<E>
。では、なぜ再度追加する必要があるのでしょうか?