我试图自定义包含ArrayList的方法,我使用Eclipse在TaskCandidateListItemDo类中生成了这些方法。

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result;

    if (keyValue == null) {
        result += 0;
    } else {
        result += keyValue.hashCode();
    }

    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }

    TaskOverrideItemDo other = (TaskOverrideItemDo) obj;

    if (keyValue == null) {
        if (other.keyValue != null) {
            return false;
        }
    } else if (!keyValue.equals(other.keyValue)) {
        return false;
    }
    return true;
}


这就是我的使用方式

taskCandidateList = (List<TaskCandidateListItemDo>) namedQuery.list();

for (TaskOverrideItemDo taskOverrideItemDo : validateOverrideListSearchCriteriaDo
        .getTaskOverrideItemDoList()) {

    if (taskCandidateList.contains(taskOverrideItemDo.getKeyValue())) {
       // do some code
    }
}


我的名单宣告如下

private List<TaskCandidateListItemDo> taskCandidateList;


//即使keyValue存在,也不会执行if语句内的某些代码。同样,断点不会在equals方法处停止。

最佳答案

尝试:

if (taskCandidateList.contains(taskOverrideItemDo)) {


如果没有getKeyValue(),我想它返回字段keyValue的值(并且您的equals方法仅比较TaskCandidateListItemDo,原因如下:

if (getClass() != obj.getClass()) {
    return false;
}


或者,您可以支持与keyValue方法内的equals类型进行比较。

10-07 11:58