2017-05-12 9 views
0

임의 형식의 해시를 쉽게 계산하는 방법을 찾고 있습니다. 주어진 다음의 클래스 :일반 형식의 해시 코드

class Foo<T> { 
    ... 
    T value; 
} 

나는 이미 value 필드를 비교하는 Objects.deepEquals를 사용하여 equals 방법을 무시했다. hashCode으로 쉽게 동일한 작업을 수행 할 수 있습니까? 구아바 또는 아파치 공유의 유틸리티 메소드 (다른 것들을 위해 이미 사용하고 있습니다)?

값이 배열 인 경우 불행하게도 Objects.hash(field1, ... , value)이 작동하지 않습니다.

나는 하나의 옵션이

Arrays.deepHashCode(new Object[]{ field1, ... , value }); 

을 할 것을 알고 있지만, 그것을위한 새로운 배열을 생성하는 대신 단지 그것을 평민 - lang3에서

+3

난 그냥 value.equals()와 value.hashCode()를 사용합니다 : 배열들이 일반적으로 사용되어서는 안된다, 제네릭과 잘 맞는, 그들이 대신 목록의 (경우에 대해하지 않습니다 예를 들어, 호출자는 두 개의 별개의 배열이 결코 같지 않음을 알아야합니다. 예를 들어 List 클래스를 살펴보십시오. 두 요소가 동일한 경우 두 개의 목록 이 동일합니다. 요소가 배열인지는 상관하지 않습니다. –

+0

Guava는 [AutoValue] (https://github.com/google/auto/tree/master/value)를 권장하기 때문에이 문제에 대한 정보가 없습니다. –

답변