2014-10-29 2 views
4

Недавно мы начали использовать функции Lombok в нашем проекте. у нас есть @Data аннотация для объекта Domain, из-за этого выполняется с некоторым исключением, созданным методом hashCode(), предоставленным Lombok api. Позже, когда я добавил @Setter и @Getter вместо @Data, я не заметил никаких проблем.Lombok @Data переопределяет существующие методы toString и hashCode?

Question1: ли Ломбок @Data переопределить существующие методы в классе, как hashCode() и toString()?

Вопрос2: Почему стоит hashCode() возникающих проблем?

ответ

10

Да, @Data: @EqualsAndHashCode и @ToString. См. the @Data documentation.

Сгенерированный метод hashCode() вызовет методы hashCode для всех полей. Поэтому, если одно из значений полей генерирует исключение, то и это.

Другим сценарием является то, что у вас есть ссылки на круглые объекты. Если у одного объекта есть поле, содержащее объект, который имеет поле, относящееся к первому объекту, вызов метода hashCode вызовет StackOverflow.

Раскрытие информации: Я являюсь одним из разработчиков Lombok.

+0

Как я могу исключить ссылки на круговые объекты из @data? Можно ли аннотировать поле, которое нужно игнорировать? – Martin

+1

Вы можете добавить @EqualsAndHashCode (exclude = "foo") –

Смежные вопросы