文字列で識別されるオブジェクトのequals(Object o)メソッドをオーバーライドしています。
class User {
@Override
public boolean equals(Object o) {
return o != null && o.hashCode() == this.hashCode();
}
@Override
public int hashCode() {
return id.hashCode();
}
}
o
ただし、メソッドでtrueを返す前に、がのサブクラスであるかどうか、this
またはその逆かどうかも確認したいと思います。equals()
最初のケースでは使用できますif (o instance of User)
が、他の方法でチェックするにはどうすればよいですか?
ありがとう
編集:私はそれを正しく説明していないので、私は完全な問題を説明するつもりです:
私はクラスを持っています
public abstract class UniqueIdentifiedObject<E> {
private E id;
protected UniqueIdentifiedObject(E id) {
super();
this.id = id;
}
public E getId() {
return id;
}
@Override
public boolean equals(Object o) {
return o != null && o.hashCode() == this.hashCode();
}
@Override
public int hashCode() {
return id.hashCode();
}
}
このクラスは、要素によって一意に識別される場合にオブジェクトとともに継承するという考え方です。たとえば、アプリのユーザーが整数で識別される場合は、次を使用します。
class User extends UniqueIdentifiedObject<Integer>
と映画のために
class Movie extends UniqueIdentifiedObject<Integer>
このUniqueIdentifiedObjectの実装の問題はequals()
、id = 1の映画で呼び出し、id=1のユーザーでtrueを返すことです。
どうすればこれを解決できますか?