0

型推論は、ジェネリック メソッドを持つ配列では機能しないようです? 「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
}
4

3 に答える 3

1

ジェネリックはプリミティブ型では機能せず、オブジェクト型でのみ機能します。

自動ボクシングにより、プリミティブ型でジェネリックを使用すると、次のようになります。

<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);
于 2016-04-10T20:33:35.077 に答える
1

ジェネリックはプリミティブ型では機能しないため、int の代わりに Integer を使用できます。

于 2016-04-09T14:28:03.333 に答える
0

primitiveここでタイプを使用する理由。ジェネリックはreferenced型でのみ機能します。

method(new int[1], 0); //Error

一緒に行くほうがいい

 method(new Integer[]{1,2,3,4}, 0); //works fine
于 2016-04-09T14:37:56.650 に答える