При написании Java Beans-ов постоянно приходится совершать одно и тоже действие — добавлять getter-ы и setter-ы для полей. Кто-то делает это вручную. Кто-то создаёт их автоматически с помощью IDE. В этом посте речь пойдёт об их генерации на основе аннотаций.
Представляю вашему вниманию Lombok Project. В его основе лежит простая идея: при описании полей, просто добавьте аннотации @Getter и/или @Setter и при компиляции будут автоматически сгенерированы соответствующие методы.
В проекте, использующем Maven необходимо добавить библиотеку в зависимости:
Область видимости выставлена в provided, чтобы библиотека не попадала в JAR/WAR файл приложения, т.к. при использовании @Getter/@Setter аннотаций она необходима только на стадии компиляции.
Ниже простой пример:
В результате Lombok сгенерит для вас примерно следующий код:
Удобно? Как по мне, то да :)
Выше я написал, что Lombok сгенерит для вас примерно такой код, т.е. похожий, но всё-таки не такой. А что же будет на самом деле? Давайте заглянем под капот и сами посмотрим:
Здесь мы используем Delombok для того, чтобы посмотреть на результирующий код. Также мы можем с помощью Delombok-а конвертировать код, написанный с применением Lombok-аннотаций в обычный Java код.
По умолчанию, Lombok создаёт открытые методы (т.е. с модификатором public). Вы также можете попросить его создать методы с любой другой областью видимости, указав необходимый AccessLevel:
Справедливости ради также приведу несколько отрицательных сторон использования этой библиотеки:
Замечу, что это отнюдь не все фишки, которые предоставляет Lombok, я лишь рассказал о самой, на мой взгляд, популярной.
Представляю вашему вниманию Lombok Project. В его основе лежит простая идея: при описании полей, просто добавьте аннотации @Getter и/или @Setter и при компиляции будут автоматически сгенерированы соответствующие методы.
В проекте, использующем Maven необходимо добавить библиотеку в зависимости:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<dependency> | |
<groupid>org.projectlombok</groupId> | |
<artifactid>lombok</artifactId> | |
<version>0.10.8</version> | |
<scope>provided</scope> | |
</dependency> |
Область видимости выставлена в provided, чтобы библиотека не попадала в JAR/WAR файл приложения, т.к. при использовании @Getter/@Setter аннотаций она необходима только на стадии компиляции.
Ниже простой пример:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import lombok.Getter; | |
import lombok.Setter; | |
public class Example { | |
@Getter @Setter | |
private int a; | |
} |
В результате Lombok сгенерит для вас примерно следующий код:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import lombok.Getter; | |
import lombok.Setter; | |
public class Example { | |
private int a; | |
public int getA() { | |
return this.a; | |
} | |
public void setA(int a) { | |
this.a = a; | |
} | |
} |
Удобно? Как по мне, то да :)
Выше я написал, что Lombok сгенерит для вас примерно такой код, т.е. похожий, но всё-таки не такой. А что же будет на самом деле? Давайте заглянем под капот и сами посмотрим:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ java -jar lombok-0.10.0.jar delombok -p Example.java | |
// Generated by delombok at Sat Sep 24 17:04:52 NOVST 2011 | |
public class Example { | |
private int a; | |
@java.lang.SuppressWarnings("all") | |
public int getA() { | |
return this.a; | |
} | |
@java.lang.SuppressWarnings("all") | |
public void setA(final int a) { | |
this.a = a; | |
} | |
} |
Здесь мы используем Delombok для того, чтобы посмотреть на результирующий код. Также мы можем с помощью Delombok-а конвертировать код, написанный с применением Lombok-аннотаций в обычный Java код.
По умолчанию, Lombok создаёт открытые методы (т.е. с модификатором public). Вы также можете попросить его создать методы с любой другой областью видимости, указав необходимый AccessLevel:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Getter(AccessLevel.PROTECTED) | |
private int b; |
Справедливости ради также приведу несколько отрицательных сторон использования этой библиотеки:
- можно запутаться при отладке, т.к. компилятор работает со сгенерированным кодом, а вы с исходным
- не все IDE могут поддерживать автодополнение методов, созданных Lombok-ом. В случае использования Eclipse, с этим проблем быть не должно, достаточно только установить JAR-файл Lombok-а
- некоторые верификаторы кода, которые анализируют исходный код, например, CheckStyle, могут рапортовать вам об ошибках, которых на самом деле нет, т.к. они не берут в рассчет аннотации Lombok-а (Здесь может помочь delomok и специальный Maven плагин, но сходу его настроить у меня не вышло.)
Замечу, что это отнюдь не все фишки, которые предоставляет Lombok, я лишь рассказал о самой, на мой взгляд, популярной.
Комментариев нет:
Отправить комментарий