digital-garden/dev/java/Не используйте @Data.md

36 lines
3.5 KiB
Markdown
Raw Normal View History

2024-09-06 17:05:53 +03:00
---
aliases:
tags:
- maturity/🌱
2024-09-27 20:25:32 +03:00
- content/opinion
2024-09-08 00:56:18 +03:00
date: 2023-11-20
2024-09-06 17:05:53 +03:00
zero-link:
- "[[00 Java разработка]]"
parents:
linked:
2024-09-06 17:05:53 +03:00
---
2024-10-02 22:03:06 +03:00
Многие разработчики в целом против использования Lombok. Это действительно холиварная тема. Но если вы всё-таки используете Lombok в проекте, постарайтесь избегать спорных и потенциально вредных аннотаций.
2024-09-06 17:05:53 +03:00
2024-10-02 22:03:06 +03:00
Одна из таких — это `@Data`. Во-первых, мало кто помнит, [какие методы она генерирует](https://projectlombok.org/features/Data).
- `@EqualsAndHashCode`. Это наиболее проблемная аннотация в составе `@Data`. Она генерирует методы `equals()` и `hashCode()` для всех полей класса, но зачастую этого не требуется. Например, для сущностей достаточно сравнивать только по идентификатору.
- `@ToString`. Если объект содержит чувствительную информацию, этот метод может вывести её в лог, что небезопасно.
- `@Getter` / `@Setter`. Здесь проблем нет.
- `@RequiredArgsConstructor`. Тоже допустимо.
2024-09-06 17:05:53 +03:00
2024-10-02 22:03:06 +03:00
Основная проблема кроется в аннотации `@EqualsAndHashCode`. Конечно, можно использовать `@EqualsAndHashCode.Exclude`, чтобы исключить отдельные поля из генерации, но вам придётся добавлять это почти ко всем полям. Использовать `@EqualsAndHashCode.Include` не получится — вы не можете включить только необходимые поля, придётся исключать все лишние.
2024-09-06 17:05:53 +03:00
2024-10-02 22:03:06 +03:00
Кроме того, избегайте аннотаций из пакета `experimental`. Эти аннотации нестабильны и могут быть удалены в следующих версиях Lombok. Единственным исключением является [@FieldNameConstants](https://projectlombok.org/features/experimental/FieldNameConstants). За несколько лет с ней не возникало проблем, а существующие альтернативы оставляют желать лучшего.
2024-09-06 17:05:53 +03:00
2024-10-02 22:03:06 +03:00
В целом, Lombok делает код чище, но, как и с любым “магическим” инструментом, важно понимать, как он работает и в каких случаях его применение уместно. В противном случае это может привести к снижению производительности или даже некорректной работе приложения.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2023-11-20]]
### Дополнительные материалы
- [Lombok + JPA: Что может пойти не так? / Хабр](https://habr.com/ru/company/haulmont/blog/564682/)
### Дочерние заметки
2024-09-14 23:38:42 +03:00
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->