2012-03-23 3 views
1

내 시도를 작동하지 ArrayList.contains에 대한 해시 코드(), 내가 구현이 동일 및 ArrayList를의 포함 방법을 사용자 정의 할 수

@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; 
} 

TaskCandidateListItemDo

클래스 내부에 이러한 방법을 생성하기 위해 Eclipse를 사용 그리고 여기 내가 그것을 사용하는 방법입니다 // 몇 가지 코드를 할

private List<TaskCandidateListItemDo> taskCandidateList; 

을 다음과 같이

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

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

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

내 목록 선언 keyValue가 존재하더라도 if 문 안쪽에서 실행되지 않습니다. 다시 얻을 실제 객체가 아니라 일부의 수 있으며,이 최대 절전 모드에서입니다 가정

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

: 또한, 브레이크 포인트는 나는이 문제를 의심 .. equals 메소드에

답변

1

을 중단 점 (또는 기록)를 넣어 다른 방법으로 당신은 equals 방법 내부 keyValue의 유형과 비교를 지원할 수

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

: TaskCandidateListItemDo의 때문에 .

+0

감사합니다 Andriano, 이것을 시도합니다. – sonx

2

을 중지 wouldnt한다 바이트 코드 조작 서브 클래스 TaskCandidateListItemDo.

물론 디버거를 사용하여이를 알 수 있어야합니다.

if (taskCandidateList.contains(taskOverrideItemDo)) { 

getKeyValue()없이, 나는 그것이 분야 keyValue의 값을 반환 (그리고 equals 방법은 비교 가정 : 그냥 함께 시도 ... 그 return false

+0

(해시) 세트도 사용하십시오. –

+0

@JoopEggen : 주문이 중요한지 여부에 따라 'LinkedHashSet'이 될 수도 있습니다. 하지만 먼저 평등 부분을 해결해 보겠습니다. 결과가 적은 경우 중요하지 않습니다. –

+0

그냥 TaskOverrideItemDo 전달하는 동안 무슨 영향을 미쳐 ArrayList TaskCandidateListItemDo하는 동안? 이 배열 목록에 TaskCandidateListItemDo를 전달하도록 변경했습니다. – sonx

관련 문제