В этой статье мы рассмотрим, как мы можем использовать lombok внутри нашего обычного Java-кода, чтобы минимизировать длину и избыточность кода.
Что такое ломбок?
Lombok, препроцессор аннотации времени компиляции, который помогает внедрить некоторый код во время компиляции. Прежде чем идти в деталях, прошу вас посмотреть видео с их сайта . Я не собираюсь показывать демо, как это, но я покажу, как мы можем использовать это внутри проекта (включая жизненный цикл Maven).
Давайте начнем с базового понимания. Как я уже сказал, lombok — это препроцессор аннотации времени компиляции. Что это значит?
-> это будет работать во время компиляции (мы видим эффект во время написания кода)
-> нам нужны зависимости в пути к классам во время компиляции (с выполнением команды javac)
-> Нам нужна поддержка плагинов, чтобы увидеть эффект в IDE во время кодирования. (Как IDE компилируется во время кодирования / сохранения)
Ломбок имеет несколько утилит / функций. Мы рассмотрим основные из них, которые я использовал до сих пор.
Примечание: чтобы узнать об аннотации, вы можете увидеть мой этот пост.
Установка :
Eclipse: Загрузите по этой ссылке , установите его (вам нужно показать каталог установки eclipse)
(Я проверил версию STS / eclipse: 3.7.3.RELEASE)
Intellij IDEA: Просто установите плагины lombok. (Файл -> Настройки -> Плагины -> Поиск / просмотр, затем установка)
Или: ссылка на плагин
Теперь: основываясь на поведении IDE, вам может понадобиться включить препроцессор аннотаций, чтобы плагины работали. (обычно современные IDE имеют это значение по умолчанию)
Из Затмения:
IntelliJ IDEA:
Настройка проекта:
Я буду использовать Maven (вы можете использовать gradle таким же образом). Моя версия Maven 3.3.9.
Шаг 1: в pom.xml добавьте зависимость
|
1
2
3
4
5
6
7
|
dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.8</version> </dependency></dependencies> |
Вы можете получить обновленную версию от Maven Central .
Шаг 2: Как мы видим, lombok — это препроцессор времени компиляции, поэтому нам нужен компилятор. Итак, добавление подключаемого модуля компилятора maven внутри сборки -> plugins-> plugin
|
1
2
3
4
5
6
7
8
9
|
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerVersion>1.8</compilerVersion> <source>1.8</source> <target>1.8</target> </configuration></plugin> |
Как видите, я определил исходную и целевую версию до 1.8.
Шаг 3: Теперь нам нужно добавить плагин lombok для работы во время компиляции проекта. Для этого нам нужно войти в плагин Управление и добавить плагин с параметрами в разделе сборки.
|
1
2
3
4
5
6
7
8
9
|
<pluginManagement> <plugins> <plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.16.8.0</version> </plugin> </plugins></pluginManagement> |
добавление плагина с параметром
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.16.8.0</version> <configuration> <encoding>UTF-8</encoding> </configuration> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>testDelombok</goal> <goal>delombok</goal> </goals> </execution> </executions></plugin> |
Пространственное примечание здесь:
1. Кодирование необходимо
2. Вы можете видеть, что я использую 2 цели , это пространственные цели, определенные для lombok для определения области тестирования и источника. Я использую оба, так как мой тестовый код также нуждается в ломбок.
Итак, мой раздел Build стал этим.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<build> <pluginManagement> <plugins> <plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.16.8.0</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerVersion>1.8</compilerVersion> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.16.8.0</version> <configuration> <encoding>UTF-8</encoding> </configuration> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>testDelombok</goal> <goal>delombok</goal> </goals> </execution> </executions> </plugin> </plugins></build> |
И для ведения журнала нам нужны зависимости. Я добавлю весь тип журнала пример. Таким образом, сложив их все вместе
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<!--Logging external dependencies--><dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-ext</artifactId> <version>1.7.21</version></dependency><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.5</version></dependency> |
Итак, наконец, мой раздел сборки POM выглядит следующим образом .
Теперь пришло время увидеть каждую функцию.
Примечание: и для eclipse, и для IntelliJ я использую Outline View для просмотра эффектов. Чтобы включить схему:
Затмение: Окно -> Показать представление -> Схема
IntelliJ: Вид -> Кнопки инструментов, вы будете структурировать.
@Getter @Setter: помогает установить метод получения с помощью переменной. Он также поддерживает параметры уровня доступа для определения областей действия получателей и установщиков.
Параметр: принимает параметр Enum AccessLevel
ПУБЛИЧНО = Публично доступно
MODULE, PACKAGE = то же, что по умолчанию (без использования модификатора)
ЗАЩИЩЕННЫЙ = такой же, как защищенный
ЧАСТНЫЙ = такой же, как частный
НЕТ = не будет реализации
На уровне класса:

Преобладающий получатель уровня класса:

@ToString: это реализация toString (), которую мы можем использовать только для уровня класса.
Параметры:
includeFieldNames (): логический тип => определить включение всех полей
callSuper (): логический тип => вызов супер
doNotUseGetters (): boolean type => избегать использования получателей полей.
exclude (): строковый массив имен полей => определить исключение полей
of (): массив строк с именами полей => определяет, какие из них будут добавлены (явно)
@Data: это комбинация нескольких аннотаций.
Где: мы можем использовать перед классом / типом
Параметры:
Примечание: данные состоят из
1. @Getter,
2. @ Сеттер.
3. @RequiredArgsConstructor
4. @Tostring
5. @EqualsAndHashCode
Пример :
IntelliJ:
@Value: это просто тип неизменяемого значения @Data.
Параметр: запись staticConstructor сделает конструктор по умолчанию закрытым
@Builder: добавление класса по умолчанию для вашего класса. Это просто конструктор (например, шаблон компоновщика с параметрами, см. Пример на рисунке)
@Singular: для уведомления о коллекции (поддерживает только guava и java util). Включает 2 метода сумматора: одно добавление, добавление всех.

val: Это делает локальную конечную переменную (внутри метода)
(сразу после this () или super () вызывается)
Использования:
1. Используйте как var (js / c #), он будет действовать как окончательный
2. Внутри каждого цикла.
|
1
|
public class ValExample { |
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
val items; public void aMethod() { val store = new Hashtable<String, String>(); store.put("one", new String("Shantonu")); val func = store.get("one"); System.out.println(func.toLowerCase()); store.put("two", "Andrii"); store.put("three", "Oleks"); for(val v: store.entrySet()){ System.out.println("KEY =" +v.getKey()+", VAL = "+ v.getValue()); } }} |

@NotNull: это добавит нулевую проверку переменной и вызовет исключение нулевого указателя.
Область применения: метод, параметр, локальная переменная
с @NotNull
@EqualsAndHashCode: просто добавляет equals (Object other) и hashCode () в класс. (так что это аннотация на уровне класса).
Он поддерживает параметры для настройки этих методов равенства и хэш-кода. Все параметры такие же, как у @ToString.
@Cleanup: это простой способ очистить ресурсы. Это фактически гарантирует, что метод close () ресурсов будет вызван в блоке finally.
Только локальная переменная:
Вызов метода close для ресурсов. если у вас есть другое имя метода, то для вызова вам нужно value = thatMehtodName (например, выход)
Вы можете увидеть простой пример здесь . Не нужно пытаться поймать.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
public class CleanupEx { public static void main(String[] args) throws IOException { String pom = System.getProperty("user.dir") + "/pom.xml"; String io = System.getProperty("user.dir") + "/logs/io.txt"; @Cleanup InputStream in = new FileInputStream(pom); @Cleanup OutputStream out = new FileOutputStream(io); int reading; char c; while ((reading=in.read())!=-1){ c=(char)reading; out.write(c); } out.flush(); }} |
Примечание. По моему мнению, это удобно, если вы не заботитесь об управлении ресурсами. Если вам нравится использовать свои ресурсы по логике, лучше избегайте этого. Пример использования многопоточных ресурсов.
Вход с использованием ломбок:
@log: это одна из лучших полезных функций. На этой картинке показаны все логгеры для сбора. Мой пример в github показывает детали.
Нам нужно установить log перед классом, вот и все. Он предоставит журнал статических переменных, и мы можем использовать его в зависимости от того, какой тип журнала мы используем.
Параметр: в качестве параметра берется тема, по умолчанию это имя класса. мы можем установить тему журнала.
Примечание: для разных реализаций журнала нам нужен другой тип конфигурации. Lombok не предоставляет никакой помощи по настройке, он просто внедряет код. Итак, нам нужно добавить, зависит от того, какой тип журнала я добавляю.
Мой пример в github содержит все 6 типов конфигураций журналов. Смотрите файл pom внимательно, чтобы узнать зависимости, а также ресурсы для файлов конфигурации.
Ссылка на GitHub примеров Lombok : https://github.com/sarkershantonu/practice-projects/tree/master/lombok-examples
Примечание: есть гораздо больше обычных и экспериментальных функций, которые я пропустил из-за отсутствия объема моих тестов (пространственно @Synchronized). Я добавлю еще один за другим в репозиторий github и добавлю здесь ссылки на ссылки.
| Ссылка: | Lombok, препроцессор Java-аннотаций во время компиляции для минимизации размера кода от нашего партнера по JCG Шантону Саркера в блоге A Test Developer . |












