错误代码如下:
for (int i=0;i< rows.size();i++) {Row r = rows.get(i);if (r.equals(row)) {assertTrue(rows.contains(row));return;}}
cassertTrue(rows.contains(row));返回了false,看起来很奇怪,此时equals 定义如下:
public boolean equals(Row row) {if (this.className.equals(row.className) && this.relationship.equals(row.relationship) &&this.superClassName.equals(row.superClassName)) {return true;}return false;}
debug 发现 list进行contains 判定使用的的 equals 是object 类的equals
将 equals 改为
@Overridepublic boolean equals(Object obj) {if (obj instanceof Row) {Row row = (Row) obj;if (this.className.equals(row.className) && this.relationship.equals(row.relationship)&& this.superClassName.equals(row.superClassName)) {return true;}}return false;}
即equals的入参应该是Object。