2011-10-20 13 views
0

3つのわずかに異なるエンティティが実装する抽象エンティティクラスがあります。私の3つのサブクラスでは、私はequalsをオーバーライドしてメソッドを持っていますが、抽象的なエンティティでもこれを行うべきですか?私がいなくても、抽象的なエンティティによって定義されたエンティティを、キャストしない限り比較することはできません。もし私が同等のことをするならば、私は異なるサブエンティティと比較して、それらが似ているということになるでしょうか?抽象エンティティのJPAエンティティと同等メソッド

例:

abstract class Log{} 
SystemLog extends Log{} 
UserLog extends Log{} 

    public void test(Log log){ 
     Log myInner = new SystemLog(); 
     if(log.equals(myInner)){ 
      //do random stuff 
     } 
    } 

答えて

1

私はキャストの問題を見ることができません。 equalsの引数の型はObjectなので、とにかくキャストして属性にアクセスする必要があります。

各サブクラスでequalsメソッドを定義すると、抽象スーパークラスのequalsが呼び出される状況が発生すると、私は等号を行う場合

私は別のサブエンティティに比較することがリスクと は、彼らはあなたがとにかくお互いに異なる従属図形を比較するリスクである

似ていることになります。スーパークラスのSetには、2つの異なるサブクラスの2つのインスタンスであるオブジェクトが設定された型として想像してください。スーパークラスでequalsをオーバーライドするかどうかはあまり関係ありません。あなたの例では

方法は、おそらく我々はすでに実際のサブクラスで実装を持っている場合、ログは、呼び出されません抽象クラスで実装等しい:

はと仮定:

UserLog extends Log{ 
    public boolean equals(Object o) { 
     //I do override equals method so I am one who is called. 
     //and here you go and check type with something like 
    if (this == o) return true; 
    if (!(o instanceof UserLog)) return false;//accepts subclasses of UserLog 
    .... 
    } 
    ... 
} 

//And then somewhere else 
    Log ul = new UserLog(); 
    test(ul); 
+0

I'vは、私の状況の例を追加しました – Marthin

+0

また、あなたの例では、equalsメソッドがサブクラスでオーバーライドされると、抽象クラスLogでequalsメソッドは呼び出されません。これは、この階層エンティティのクラスであるかどうかとはあまり関係がありません。単純なメソッドのオーバーライドです。 –

関連する問題