суббота, 24 сентября 2011 г.

Lombok: @Getter and @Setter annotations

При написании Java Beans-ов постоянно приходится совершать одно и тоже действие — добавлять getter-ы и setter-ы для полей. Кто-то делает это вручную. Кто-то создаёт их автоматически с помощью IDE. В этом посте речь пойдёт об их генерации на основе аннотаций.


Представляю вашему вниманию Lombok Project. В его основе лежит простая идея: при описании полей, просто добавьте аннотации @Getter и/или @Setter и при компиляции будут автоматически сгенерированы соответствующие методы.

В проекте, использующем Maven необходимо добавить библиотеку в зависимости:

Область видимости выставлена в provided, чтобы библиотека не попадала в JAR/WAR файл приложения, т.к. при использовании @Getter/@Setter аннотаций она необходима только на стадии компиляции.

Ниже простой пример:



В результате Lombok сгенерит для вас примерно следующий код:



Удобно? Как по мне, то да :)

Выше я написал, что Lombok сгенерит для вас примерно такой код, т.е. похожий, но всё-таки не такой. А что же будет на самом деле? Давайте заглянем под капот и сами посмотрим:



Здесь мы используем Delombok для того, чтобы посмотреть на результирующий код. Также мы можем с помощью Delombok-а конвертировать код, написанный с применением Lombok-аннотаций в обычный Java код.

По умолчанию, Lombok создаёт открытые методы (т.е. с модификатором public). Вы также можете попросить его создать методы с любой другой областью видимости, указав необходимый AccessLevel:



Справедливости ради также приведу несколько отрицательных сторон использования этой библиотеки:

  • можно запутаться при отладке, т.к. компилятор работает со сгенерированным кодом, а вы с исходным
  • не все IDE могут поддерживать автодополнение методов, созданных Lombok-ом. В случае использования Eclipse, с этим проблем быть не должно, достаточно только установить JAR-файл Lombok-а
  • некоторые верификаторы кода, которые анализируют исходный код, например, CheckStyle, могут рапортовать вам об ошибках, которых на самом деле нет, т.к. они не берут в рассчет аннотации Lombok-а (Здесь может помочь delomok и специальный Maven плагин, но сходу его настроить у меня не вышло.)

Замечу, что это отнюдь не все фишки, которые предоставляет Lombok, я лишь рассказал о самой, на мой взгляд, популярной.

Комментариев нет:

Отправить комментарий