Project lombok это прекраснейший препроцессор аннотаций, который сильно упрощает код и делает java похожей на современный язык.
Подготовка
Библиотеку project lombok надо добавить в classpath проекта (ну и JUnit сотоварищи тоже добавим):
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <lombok.version>1.16.6</lombok.version> <junit.version>4.12</junit.version> <hamcrest.version>1.3</hamcrest.version> </properties> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>${hamcrest.version}</version> <scope>test</scope> </dependency> </dependencies>
Обратите внимание, что артефакт project lombok добавлен со scope «provided», так как он используется только во время компиляции.
Улучшаем java
Для начала определим какую-нибудь сущность, которая будет использоваться в приветствии:
import lombok.Builder; import lombok.Getter; import lombok.Setter; import java.math.BigDecimal; /** * Example of entity. */ @Builder public class Entity { /** * Some id. */ @Getter @Setter private Long id; /** * Entity name. */ @Getter @Setter private String name; /** * Entity content. */ @Getter @Setter private BigDecimal amount; }
Лучше всего все новые аннотации продемонстрирует второй класс, который, собственно, и будет приветствовать:
import lombok.experimental.UtilityClass; import lombok.extern.java.Log; import lombok.val; import java.math.BigDecimal; /** * Example of lombok annotation usage. */ @Log @UtilityClass public class HelloLombok { /** * Builds sample entity and says 'Hello'. * @return "10 greetings from Lombok" */ public static String greet() { val entity = Entity.builder() .id(1L) .name("Lombok") .amount(BigDecimal.TEN) .build(); val result = String.format("%d greetings from %s", entity.getAmount().intValue(), entity.getName()); log.info("Resulting string is: " + result); return result; } }
Вуаля! У класса Entity автоматически появились геттеры и сеттеры, в классе HelloLombok сам по себе появился интерфейс для логгирования и приватный конструктор.
Проверим, что всё работает как мы задумали:
------------------------------------------------------- T E S T S ------------------------------------------------------- Running ru.easyjava.java.HelloLombokTest Oct 19, 2015 8:59:49 PM ru.easyjava.java.HelloLombok greet INFO: Resulting string is: 10 greetings from Lombok Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.017 sec - in ru.easyjava.java.HelloLombokTest Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0