2

私はそのequals()方法をよりよく理解しようとしています。私が見たすべての例は、次のようなことをします。

public class City
{
    public boolean equals(Object other)
    {
        if (other instanceof City && other.getId().equals(this.id))
        {
            return true;
        }

        // ...
    }
}

メソッドは都市ではなくオブジェクトを引き受ける必要がありますか?

たとえば、これは許可されていませんか?

public class City
{
    public boolean equals(City other)
    {
        if (other == null)
        {
            return false;
        }

        return this.id.equals(other.getId());
    }
}
4

3 に答える 3

6

はい、それはでなければなりませんObject。それ以外の場合は、実際をオーバーライドするのではなく、オーバーロードします。 Object#equals()

オーバーロードするだけの場合は、CollectionAPIなどの標準APIでは使用されません。

関連する質問:

于 2010-07-17T16:34:06.547 に答える
1

あなたは両方を持つことができます:(上記のpokeのコメントを参照してください)

public class City
{
    public boolean equals(Object other)
    {
        return (other instanceof City) && equals((City)other) ;
    }
    public boolean equals(City other)
    {
        return other!=null && this.id.equals(other.getId());
    }
}
于 2010-07-17T17:20:09.283 に答える
0

Objectequals()をオーバーライドする場合は、a以外のものを使用しないでください。

特殊なequals()メソッドを作成することは一般的なエラーですが、equals()コントラクトに違反する傾向があります。

于 2010-07-17T16:34:29.317 に答える