1

2 つのオブジェクトを比較して、それらが同じかどうかを確認しようとしています。JSON コードから最初の List を作成し、List (データ) に InstructionModel のインスタンスを設定します。次に、データを選択し、InstructionModel の新しいインスタンス (モデル) を作成して、データをデータベースと比較します。しかし、結果は常に false です。コードで何が間違っているのでしょうか?

exists = data.contains(model);

if(!exists)
{
    //Do Some Stuff Here
}

からのデータList<InstructionModel>: ここに画像の説明を入力 InstructionModel オブジェクトのデータ: ここに画像の説明を入力

4

2 に答える 2

8

InstructionModel クラスの equals メソッドをオーバーライドする必要があります。このメソッドでは、値を比較し、一致する場合は true を返し、一致しない場合は false を返します。

関数はコンテナ内のオブジェクトのList#contains関数を使用します。Object#equalsこの関数がオーバーライドされていない場合、実際の値ではなく、参照のみが比較されます。

追加:コメントが言及しているように、「equals」メソッドをオーバーライドする場合は、「hashCode」メソッドもオーバーライドする必要があります(逆も同様です)。コレクションはこれらのメソッドと連携して、オブジェクトのインスタンスを比較します。例: 両方をオーバーライドしない場合、2 つのインスタンスは List では同じと見なされますが、'Hashmap' では同じではないと見なされる可能性があります。

于 2013-02-12T19:36:34.853 に答える
1

equalsのメソッドをオーバーライドしたい場合がありますInstructionModel

于 2013-02-12T19:37:14.620 に答える