次のようなクラスがあるとします。
static class Contents {
private String contents;
public Contents(String contents) {
this.contents = contents;
}
}
次のコードを記述します。
Vector<Contents> v = new Vector<>();
v.add(new Contents("a"));
System.out.println("Contains a: "+v.contains(new Contents("a")));
次の出力が得られます。
Contains a: false
ただし、次equals
のようにメソッドをContents
クラスに追加します。
public boolean equals(Object obj) {
return Objects.equals(this.contents, ((Contents)obj).contents);
}
突然、次の結果が得られます。
Contains a: true
より良い実装は次のようになります。
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass())return false;
final Contents other = (Contents) obj;
if (!Objects.equals(this.contents, other.contents))return false;
return true;
}