2016-04-09 21 views
0

ジェネリックメソッドを持つ配列の型推論は機能しないようですか? '(T []、T)を含むメソッドは引数(int []、int)には適用されません。私はこれをどのようにしなければならないのですか?ジェネリックメソッドの配列パラメータのJava型推論

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

... 

public static <T> void method(T[] array, T value) { 
    //Implement 
} 
+2

ジェネリックは、プリミティブ型では動作しません、それはオブジェクトのみのためです。代わりに 'new Integer [1]、0'を使ってみてください。 –

+0

Javaで 'Double'、' Integer'、 'Boolean'、...が作成される理由もあります。 –

+0

プリミティブがジェネリック型で動作しないと言ったらどういう意味ですか? intは問題なく動作しますが、それは問題の原因となる配列です – Dimpl

答えて

1

で行く方が良いです。

あなたが原因オートボクシングに、プリミティブ型とジェネリックを使用してどのように見えるかを行うことができます。

<T> void methodOne(T value) {} 

methodOne(1); // Compiles OK, T = Integer. 

ここで実際に何が起こっている、intリテラル1Integer.valueOf(1)に「箱詰め」されているとされていますタイプIntegerのオブジェクトです。

int[]はオブジェクトタイプそのものなので、int[]も汎用メソッドに渡すことができます。だから、:int[]Integerが関連するタイプではないので、両方のパラメータによって満たされるT変数の単一の型はありません。

methodOne(new int[1]); // Compiles OK, T = int[]. 

ただし、同じ型の変数を持つこれら二つを併用することはできません。 int[]からInteger[]までの同等のオートボクシング演算子はありません。

そのように、あなたが最初のパラメータとしてInteger[]配列を渡す必要があります:

method(new Integer[1], 0); 
1

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

0

ここにprimitiveタイプを使用してください。ジェネリックスはreferencedタイプでのみ動作します。

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

ジェネリック医薬品のみオブジェクト型で、プリミティブ型では動作しません

method(new Integer[]{1,2,3,4}, 0); //works fine