2

このクラスで equals() メソッドをオーバーライドしたい。equals() メソッドをオーバーライドしている間は通常のルールに従いますが、オブジェクトをクラス型に型キャストします

しかし、私の equals() メソッドでは、オブジェクトが同じジェネリック型である場合にのみ true を返したいと考えています。

equals() メソッドでインスタンスのランタイム タイプを確認するにはどうすればよいですか?

これが私のコードです:

public class GenericsRunTimeType<T> {

private T foo;
public GenericsRunTimeType(T foo){
    this.foo = foo;

}

@Override
public boolean equals(Object obj){
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;

    // Before doing this I want to test if obj and this are of the same generic type
    GenericsRunTimeType other = (GenericsRunTimeType) obj;
    if(other.equals(obj))
        return true;
    else
        return false;
}

}

4

3 に答える 3

7

あなたの場合、あなたはただチェックすることができます:

foo.getClass().equals(other.foo.getClass())

これは、クラスTにクラスのメンバーが既に存在するためです。ただし、一般的に、そのようなメンバーがいない場合は、@ Rohit Jain による回答を参照してください。(+1)

于 2013-08-19T06:29:04.493 に答える