2016-06-11 2 views
0

나는 equals를 오버라이드 할 때마다 hasCode를 재정의해야한다는 것을 알고 있지만 과부하는 어떻게해야합니까? hashCode를 여전히 대체해야합니까?자바에서 오버 코드를 오버라이드해야합니까?

사이드 노트 : 질문을 게시하기 전에 먼저 평등하게 오버플로하는 것을 피해야한다고 읽었지만 과부하를 선택하면 어떻게해야하는지 알고 싶습니다.

+3

오버로드가 '같음'입니까? * 재정의 *를 의미 했습니까? 당신의 유스 케이스는 정확히 무엇입니까? 오버로드하면 오버로드 메서드가 더 이상 'Object.equals'를 오버라이드하지 않습니다. 즉, http://stackoverflow.com/questions/12787947/overriding-object-equals-vs- 오버로드 - 그것). – Tunaki

+0

Misread 질문입니다. 죄송합니다. 다시 열었습니다. 잘못된 복제본입니다. –

+0

@ Tunaki 나는 참으로 과부하 equals를 의도하고 그것이 새로운 방법을 정의하지만 여전히, 나는 hashCode를 재정의해야하는지 알지 못했다 : 나는 이론적으로 새로운 equals를 만들었 기 때문에 항상 대신에 사용했을 것이라고 생각했다. Object I의 새 hashCode를 다시 정의해야했습니다. 귀하의 링크가 아주 잘 설명 왜 오버로드하지 않는 경우 오버로드가 실패 할 수 있습니다 (컬렉션) 너무 감사 +1 –

답변

2

아니요 해시 기반 컬렉션은 오버로드 된 equals() 메소드를 사용합니다. 그것은 당신의 방법이고, 당신은 그것이 무엇을해야하는지 결정합니다. 따라서 계약은 전적으로 귀하의 것입니다.

그러나 나는 당신이 말한 것을 반복 할 것입니다. 처음에는 equals()를 오버로드해서는 안됩니다. 그렇게한다면, 대부분의 혼란을 피하기 위해 실제 equals (Object) 메서드와 일관되게 만들어야합니다. equals()와 일관성이 있어야하므로 equals (Object)를 재정의해야하고 hashCode()를 재정의해야 함을 의미합니다.

관련 문제