型推論は、ジェネリック メソッドを持つ配列では機能しないようです? 「The method contains(T[], T) is not applied for the arguments (int[], int)」というエラーが表示されます。これをどのように行う必要がありますか?
method(new int[1], 0); //Error
...
public static <T> void method(T[] array, T value) {
//Implement
}
型推論は、ジェネリック メソッドを持つ配列では機能しないようです? 「The method contains(T[], T) is not applied for the arguments (int[], int)」というエラーが表示されます。これをどのように行う必要がありますか?
method(new int[1], 0); //Error
...
public static <T> void method(T[] array, T value) {
//Implement
}
ジェネリックはプリミティブ型では機能せず、オブジェクト型でのみ機能します。
自動ボクシングにより、プリミティブ型でジェネリックを使用すると、次のようになります。
<T> void methodOne(T value) {}
methodOne(1); // Compiles OK, T = Integer.
ここで実際に起こっているのは、intリテラルが型のオブジェクトである1に「ボックス化」されていることです。Integer.valueOf(1)Integer
はオブジェクト型そのものであるint[]ため、ジェネリック メソッドに を渡すこともできます。int[]そう:
methodOne(new int[1]); // Compiles OK, T = int[].
ただし、これら 2 つを同じ型変数と混合することはできません。int[]とIntegerは関連する型ではないためT、両方のパラメーターによって満たされる単一の型変数はありません。int[]from to に相当するオートボクシング演算子はありませんInteger[]。
Integer[]そのため、最初のパラメーターとして配列を渡す必要があります。
method(new Integer[1], 0);
ジェネリックはプリミティブ型では機能しないため、int の代わりに Integer を使用できます。
primitiveここでタイプを使用する理由。ジェネリックはreferenced型でのみ機能します。
method(new int[1], 0); //Error
一緒に行くほうがいい
method(new Integer[]{1,2,3,4}, 0); //works fine