抽象クラスでequalsメソッドをオーバーライドしようとしています。パラメータObject o
がメソッドを継承したクラスのインスタンスであるかどうかと、equalsメソッドを継承したクラスと同じ型に型キャストするかどうかを調べる方法はありますか?すべてのサブクラスでequalsメソッドを使用するクラス
これはこれまで私が試したことですが、タイプjava.lang.Object
のエラー変数を受け取りました。 oが型キャストされていない理由はありますか? getOperand()
メソッドは複合型を返します。
@Override
public boolean equals(Object o){
if (o.getClass() == this.getClass()){
this.getClass().cast(o);
return (o.getOperand().equals(this.getOperand()));
}
else {
return false;
}
}
"しかし、私はそれを動作させることができません" - >なぜですか?コンパイルエラーはありますか?実行時の例外ですか?予期しない動作?どうか明らかにしてください。また、['Class#isAssignableFrom(...)'](https://docs.oracle.com/javase/9/docs/api/java/lang/Class.html#isAssignableFrom- java.lang.Class-)。これは継承も処理するからです。 – Turing85
'getOperand()'は何を返しますか?私は 'String'を推測しています。 'o.getOperand()。equals(this.getOperand())'を代わりに使用しますか? – CKing
"getOperand()メソッドは複合型を返します。" - > @CKingは、これがシングルトンでない限り、あなたは '=='でそれらを比較する必要はありません。実際には、あなたがしていることを正確に知っていなければ、オブジェクトを '=='と比較するべきではありません(https://stackoverflow.com/questions/7520432/what-is-the-difference-between-vs-equals -in-java)。 – Turing85