Hello, lombok!

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

Скачать код примера

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *