ジェネリックメソッドを持つ配列の型推論は機能しないようですか? '(T []、T)を含むメソッドは引数(int []、int)には適用されません。私はこれをどのようにしなければならないのですか?ジェネリックメソッドの配列パラメータのJava型推論
method(new int[1], 0); //Error
...
public static <T> void method(T[] array, T value) {
//Implement
}
ジェネリックメソッドを持つ配列の型推論は機能しないようですか? '(T []、T)を含むメソッドは引数(int []、int)には適用されません。私はこれをどのようにしなければならないのですか?ジェネリックメソッドの配列パラメータのJava型推論
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[]
も汎用メソッドに渡すことができます。だから、:int[]
とInteger
が関連するタイプではないので、両方のパラメータによって満たされるT
変数の単一の型はありません。
methodOne(new int[1]); // Compiles OK, T = int[].
ただし、同じ型の変数を持つこれら二つを併用することはできません。 int[]
から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
ジェネリックは、プリミティブ型では動作しません、それはオブジェクトのみのためです。代わりに 'new Integer [1]、0'を使ってみてください。 –
Javaで 'Double'、' Integer'、 'Boolean'、...が作成される理由もあります。 –
プリミティブがジェネリック型で動作しないと言ったらどういう意味ですか? intは問題なく動作しますが、それは問題の原因となる配列です – Dimpl