2016-07-07 10 views
1

クラスを持つことは可能ですかMyClass<T>ここで、Tは1次元または多次元の整数配列ですか?もしそうなら、タイプがTのクラスにフィールドがあるとすれば、equalsメソッドを書くにはどうすればいいですか?型が未知の次元の配列である汎用クラスを持つことは可能ですか?

+0

何2つの 'MyClass'インスタンスが等しいという要件ですか? – user1803551

+0

すべてのフィールドが等しいこと。 – Johnny

+0

そして、それらのすべてに対して 'equals'メソッドを呼び出します。あなたの最初の質問については、自分自身をチェックしてみませんか? – user1803551

答えて

1

あなたが実際のクラスに切り替え、個別のアレイ・オブ・プリミティブを処理したくない場合は、あなただけの配列の1つの以上の層にそれをラップし、Arrays.deepEquals()を使用することができます。

Arrays.deepEquals(new Object[]{t}, new Object[]{other.t}) 
-2
import java.util.*; 

public class A<T> 
{ 
    private final T _t; 
    public A(T t) { _t = t; } 
    public void doSmth() { System.out.println(_t); } 

    public static void main(String[] args) 
    { 
     { 
       A<Integer> x = new A<>(10); 
       x.doSmth(); 
     } 

     { 
      Integer[] a = new Integer[5]; 
      A<Integer[]> x = new A<>(a); 
      x.doSmth(); 
     } 

     { 
      List<Integer> a = new ArrayList<Integer>(); 
      A<List<Integer>> x = new A<>(a); 
      x.doSmth(); 
     } 

    } 
} 
+0

'equals'を実装しようとすると動作しません。 'Arrays.deepEquals(this._t、other._t)'を試すと、コンパイラは '_t'が配列であることを知ることができません。また、'(Object [])_t'でキャストできませんプリミティブの配列 – Johnny

+0

http://stackoverflow.com/questions/1449001/is-there-a-java-reflection-utility-to-do-a-deep-comparison-of-two-objects – rezdm

+0

私はどちらでも動作しませんすべてのフィールドで単に 'equals'を呼び出します。 – Johnny

関連する問題