2012-05-04 9 views
2

私はJavaのジェネリックスに本当に新しいです。私は同じ型の2つの配列を比較する簡単なメソッドを作成しようとしていますが、汎用メソッドを使いたいと思います。私がコンパイルしようとすると、私が取得ジェネリックメソッド - "プライベート<T>ブール値(T []、T [])"

public class MWE { 
    public static void main(String[] args){ 
    int[] test1,test2; 
    test1 = new int[2]; 
    test2 = new int[2]; 
    checkArray(test1,test2); 
    } 

    private <T> boolean checkArray(T[] check, T[] test) { 
    if(check.length != test.length) 
     return false; 

    for(int i=0;i<check.length;i++) 
     if(check[i]!=test[i]) 
     return false; 

    return true; 
    } 
} 

MWE.java:6: <T>checkArray(T[],T[]) in MWE cannot be applied to (int[],int[]) 
    checkArray(test1,test2); 
    ^
1 error 
+0

int型、整数ではない試してみてください。 –

+1

あなたのメソッドの宣言は、 'private boolean checkArray(Object [] check、Object [] test){' – newacct

答えて

2

は整数[] intの代わりに[]を使用してみてください、私は以下MWEを添付しました。より詳細には

Javaのジェネリックは、常にこのような一般的なで作業する場合ので、あなたはそれぞれのタイプのクラスバージョンを使用する必要があり、クラスで動作します。 Javaはautoboxingを使ってint値をIntegerオブジェクト値に自動的に変換するので、実際に使用されている型名以外のコードに違いはありません。

+0

のように簡略化することができます。いいえ、良い、悪い、または無関心で、クラス型でのみ動作します。 – zostay

4

ジェネリックスはオブジェクトに対してのみ機能します。プリミティブ配列にはオーバーロードされたメソッドが必要です。 (Integer []、Boolean []などに切り替えることができます)

2

intの代わりにIntegerに配列の型と変数を変更します。また、checkArrayメソッドを静的にしてください。

public class MWE 
{ 
    public static void main(String[] args) 
    { 
     Integer[] test1 , test2; 
     test1 = new Integer[ 2 ]; 
     test2 = new Integer[ 2 ]; 
     checkArray(test1 , test2); 
    } 

    private static <T> boolean checkArray(T[] check , T[] test) 
    { 
     if (check.length != test.length) 
      return false; 

     for (int i = 0 ; i < check.length ; i++) 
      if (check[ i ] != test[ i ]) 
       return false; 

     return true; 
    } 
} 
1

他の人が指摘したように、ジェネリック医薬品はオブジェクトのみで動作するので、技術的にはあなたがInteger[]の使用に切り替えることができ、Boolean[]など

しかし、Integer[]Boolean[]Object[]を拡張することに注意してください。 Tは常に少なくともObjectであると推測されるので、このメソッドのジェネリック化は実際にはほとんど効果がありません。例えば、以下はまだコンパイル:

Integer[] test1 = new Integer[2]; 
Boolean[] test2 = new Boolean[2]; 
checkArray(test1,test2); 

チェックが機能するために、発信者は、typeパラメータを指定する必要があります:

this.<Integer>checkArray(test1,test2); //compile error 
関連する問題