programing

상속이 있는 @Data 주석 lombok의 warning equals/hashCode

sourcejob 2022. 11. 4. 23:24
반응형

상속이 있는 @Data 주석 lombok의 warning equals/hashCode

나는 다른 것들로부터 상속받는 실체를 가지고 있다.한편, 저는 보일러 코드를 줄이기 위해 롬복 프로젝트를 사용하고 있기 때문에@Data주석입니다.주석@Data상속이 있는 경우 다음 경고가 발생합니다.

이 클래스가 java.lang을 확장하지 않더라도 equals/hashCode 구현을 생성하지만 슈퍼클래스에 대한 호출은 없습니다.오브젝트. 의도적이라면 추가한다.@EqualsAndHashCode(callSuper=false)니 타입에 맞게.

주석을 추가하는 것이 좋습니까?@EqualsAndHashCode (callSuper = true)또는@EqualsAndHashCode (callSuper = false)추가되지 않은 경우, 어느 쪽입니까?

기본값은 다음과 같습니다.false지정하지 않고 경고를 무시하면 이 메시지가 나타납니다.

네, 다음 명령어를 추가할 것을 권장합니다.@EqualsAndHashCode에 대한 주석@Data오브젝트가 아닌 다른 것을 확장하는 주석이 달린 클래스.필요하시면 말씀드릴 수 없습니다.true또는false클래스 계층에 따라 다르며 케이스 바이 케이스로 검사해야 합니다.

그러나 프로젝트 또는 패키지의 경우lombok.config오브젝트의 직접 서브클래스가 아닌 경우 슈퍼 메서드를 호출합니다.

lombok.equalsAndHashCode.callSuper = call

이 동작에 대해서는, 설정 시스템의 메뉴얼과 서포트되고 있는 설정 의 메뉴얼을 참조해 주세요.

공개:저는 롬복 개발자입니다.

@EqualsAndHashCode(callSuper=true)이 경고를 해결합니다.

첫 번째 주요 질문은 다음과 같습니다.

주석 @EqualsAndHashCode(call Super = true) 또는 @EqualsAndHashCode(call Super = false)를 추가하는 것이 좋습니까?

일반적으로 받아들여지는 대답은 다음과 같습니다.

...그건...

이에 대한 자세한 내용은 @EqualsAndHashCode에 기재되어 있는 문서를 참조해 주십시오.특히 IMHO:

call Super를 true로 설정하면 생성된 메서드에 슈퍼클래스의 equals 메서드와 hash Code 메서드를 포함할 수 있습니다.hashCode의 경우 super.hashCode()의 결과가 해시 알고리즘에 포함되어 있습니다.또한 슈퍼 실장이 전달된 객체와 다르다고 판단하면 생성된 메서드는 false를 반환합니다.모든 동등한 구현이 이 상황을 적절하게 처리하는 것은 아니라는 점에 유의하십시오.단, 롬복 생성 등가 구현은 이 상황을 적절하게 처리하므로 슈퍼클래스도 롬복 생성 등가 메서드를 가지고 있다면 안전하게 호출할 수 있습니다.

이를 좀 더 자세히 설명하자면:상태 정보가 없거나 자체에서 @Data 주석을 사용하거나 "상황이 적절하게 해결"되는 equals/module 구현이 있는 슈퍼 클래스에서 상속하는 경우 'callSuper=true'를 선택합니다.이것은 상태 값의 올바른 해시를 반환하는 것으로 해석됩니다.

슈퍼클래스의 멤버도 비교하려면@EqualsAndHashCode(callSuper=true)그러나 현재 클래스의 필드만 비교하고 싶은 경우@EqualsAndHashCode(callSuper=false)기본 옵션입니다.

Delombok 기능을 사용하면 다음과 같이 설정했을 때 차이가 있음을 알 수 있습니다.true이 행은 생성된 등호 메서드에 추가됩니다.if (!super.equals(o)) return false;두 개체를 비교할 때 고려해야 하는 슈퍼클래스의 멤버가 있는 경우 올바르게 비교하려면 true로 설정해야 합니다.

언급URL : https://stackoverflow.com/questions/38572566/warning-equals-hashcode-on-data-annotation-lombok-with-inheritance

반응형