なぜ私はこのようにしなければならないのですか?
public <T> void myMethod(MyClass<T> value){
}
なぜ<T>
二度言及しなければならないのですか?
なぜ私はこのようにしなければならないのですか?
public <T> void myMethod(MyClass<T> value){
}
なぜ<T>
二度言及しなければならないのですか?
1つ目<T>
は、メソッドがジェネリックパラメーターを持つものとして宣言します。
2番目は、クラス<T>
のジェネリックパラメーターの値を指定しました。MyClass<>
(ちょうどのようにMyClass<string>
)
最初<T>
は、テンプレート化されたメソッドを使用していることを宣言します。次のように言うのも同様に適切です。
public void myMethod(MyClass<?> value){
}
次のように、クラスレベルでジェネリックパラメータを宣言することもできます。
public class MyClass<T> {
public void myMethod(MyClass<T> value){
}
}
外側の <T> は「これはジェネリック メソッドです」と言い、T に境界を設定する機会も与えます。たとえば、T は Comparable<T> を拡張します。T を使用するすべてのパラメーターに対して、すべてを繰り返したくないでしょう。
実際、最初の値は関数でジェネリッククラスが使用されていることを定義し、2番目の MyClass<T>
値はクラスのジェネリック型がどこT
にあるかを示しています。List<String>
String
T