ジェネリックはプリミティブ型では機能せず、オブジェクト型でのみ機能します。
自動ボクシングにより、プリミティブ型でジェネリックを使用すると、次のようになります。
<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);