2011-07-28 5 views
5

는 다음과 같은 클래스를 감안할 때 동일스칼라 케이스 클래스 구현

val newAtttributes : List[EntityAttribute] 
val withoutIds : List[EntityAttribute] 

println("without: " + withoutIds) 
println("new:  " + newAtttributes) 

    val differences = newAtttributes.diff(withoutIds) 
    println("diff: " + differences) 
    if(newAtttributes.size == 1 && withoutIds.size == 1){ 
    println("==:  " + (newAtttributes.get(0) == withoutIds.get(0))) 
    println("equals: " + (newAtttributes.get(0).equals(withoutIds.get(0)))) 
    println("hequals: " + (newAtttributes.get(0).hashCode == withoutIds.get(0).hashCode)) 
    } 

내가 예상 차이 출력 99 100 시간 초과를 얻을. 가끔씩 diff 함수는 빈리스트를 리턴해야 할 때 빈리스트를 반환 할 것이다.

예 : I 안정적으로 보통 약 10-18 반복 한 후이 오류를 재현 할 수

without: List(EntityAttribute(428861607,-1147340381,None,120224,None,120224,56,-356863126,None,120224,None)) 
new:  List(EntityAttribute(428861607,-1147340381,None,120224,None,120224,23,424930523,None,120224,None)) 
diff: List() 
==:  false 
equals: false 
hequals: false 

. 두 목록은 서로 다른 출처에서 나오므로 서로 다르게 구성됩니다. 나는 그것이 자동 권투 또는 나쁜 hashCode 구현과 관련이 있다고 추측하지만 나는 진전없이 2 일 동안 내 머리를 벽에 부딪 치고있다.

스칼라 2.9.0-1을 사용하고 있습니다.

+1

우리는 실제로 문제를 재현 할 수 있도록 실제 값을 인쇄 할 수 있습니다 ... –

+0

'ModelWithId {'?를 확장 한 후에'}'를 잊지 않았습니까? –

답변

-1

두 개의 EntityAttribute에는 longVal에 대해 다른 값이 들어 있습니다. 사례 클래스의 기본값 equals 구현은 모든 구성원을 고려하므로 불균등하게 만듭니다. 회원의 하위 집합 만 사용하려면 자신의 equalshashCode을 정의해야합니다.

+1

정확히, diff는 크기 1의 목록이어야합니다. –

관련 문제