Это второй день моего участия в ноябрьском испытании обновлений, подробности о мероприятии:Вызов последнего обновления 2021 г.
Ломбок является спорным плагином. Его нельзя отрицать свою магию. Многие из них делают нас ленивыми. Однако, уменьшая количество кода, когда модуль использует Lombok, остальная часть кода, который зависит от этого модуля, должен ввести ломбок зависимости. Использовать в целом в практических приложениях
Введение
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
Lombok — это утилита Java, которую можно использовать, чтобы помочь разработчикам избавиться от многословия Java, особенно для простых объектов Java (POJO). Это делается с помощью аннотаций. Внедрив Lombok в среду разработки, разработчики могут сэкономить много времени на построении таких методов, как hashCode() и equals(), которые ранее использовались для классификации различных средств доступа и мутаторов.
Установить
IDEA устанавливает плагин Lombok
1. Настройка → Плагин, найдите Lombok для установки.
Версия IDEA 2020.3 имеет встроенный плагин Lombok,
2. Импорт зависимостей Lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
Eclipse устанавливает плагин Lombok
1. Загрузите пакет jar с официального сайта:projectlombok.org/download
2. Дважды щелкните пакет lombak.jar.
3. Нажмите «Установить/обновить».
4. Нажмите «Выход из установщика», чтобы завершить установку.
5. После завершения установки проверьте, есть ли дополнительный пакет lombok.jar в пути установки eclipse и добавлено ли следующее содержимое в файл конфигурации eclipse.ini: -javaagent:D:\eclipse-jee-2021-03-R-win32-x86_64\eclipse\lombok.jar
Общие аннотации Ломбока
Документация по аннотации Ломбока
@NonNull
@Cleanup
@Getter and @Setter
@AllArgsConstructor
@RequiredArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode
@Data
@NonNull
При использовании перед параметром метода-члена или конструктора будет автоматически сгенерирована ненулевая проверка параметра, а если параметр пуст, будет сгенерировано исключение нулевого указателя.
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
this.name = person.getName();
}
}
эквивалентно
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
if (person == null) {
throw new NullPointerException("person is marked @NonNull but is null");
}
this.name = person.getName();
}
}
@Cleanup
Используется перед переменной, чтобы гарантировать, что ресурс, представленный этой переменной, будет автоматически закрыт.По умолчанию вызывается метод close() ресурса.
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
эквивалентно
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
if (out != null) {
out.close();
}
}
} finally {
if (in != null) {
in.close();
}
}
}
}
@Getter and @Setter
Перед переменной-членом это эквивалентно созданию соответствующих методов получения и установки для переменной-члена.Вы также можете указать модификатор доступа для созданного метода.По умолчанию является общедоступным.
В классе можно использовать для всехнестатическийПеременные-члены генерируют соответствующие методы get и set.
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class GetterSetterExample {
@Getter
@Setter
private int age;
@Setter(AccessLevel.PROTECTED)
private String name;
}
эквивалентно
public class GetterSetterExample {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected void setName(String name) {
this.name = name;
}
}
@AllArgsConstructor / @NoArgsConstructor
Используется в классе для создания конструктора с полными параметрами и конструктора без параметров для класса.
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String password;
}
эквивалентно
public class User {
private int id;
private String name;
private String password;
public User() {
}
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
}
@ToString
Использование в классе, генерирует метод toString()
- @ToString.Exclude исключает указанное поле
- @ToString.Include включает указанное поле
import lombok.ToString;
@ToString
public class User {
@ToString.Exclude
private int id;
private String name;
}
эквивалентно
public class User {
private int id;
private String name;
public User() {
}
public String toString() {
return "User(name=" + this.name + ")";
}
}
@EqualsAndHashCode
Создайте методы equals() и hashCode(), а также метод canEqual(), чтобы определить, является ли объект экземпляром текущего класса, и используйте класс только в сгенерированном методе.нестатическийинепреходящийПеременные-члены
- @ Equalthandhashcode.exclude исключает указанное поле
- @ EqualsAndHashCode.Include содержит указанное поле
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private int id;
private String name;
}
эквивалентно
public class User {
private int id;
private String name;
public User() {
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof User)) {
return false;
} else {
User other = (User)o;
if (!other.canEqual(this)) {
return false;
} else if (this.id != other.id) {
return false;
} else {
Object this$name = this.name;
Object other$name = other.name;
if (this$name == null) {
if (other$name != null) {
return false;
}
} else if (!this$name.equals(other$name)) {
return false;
}
return true;
}
}
}
protected boolean canEqual(Object other) {
return other instanceof User;
}
public int hashCode() {
int PRIME = true;
int result = 1;
int result = result * 59 + this.id;
Object $name = this.name;
result = result * 59 + ($name == null ? 43 : $name.hashCode());
return result;
}
}
@Data
Содержит @Getter и @Setter , @ToString, @EqualsAndHashCode, @NoArgsConstructor
import lombok.Data;
@Data
public class User {
private int id;
private String name;
}
эквивалентно
public class User {
private int id;
private String name;
public User() {
}
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof User)) {
return false;
} else {
User other = (User)o;
if (!other.canEqual(this)) {
return false;
} else if (this.getId() != other.getId()) {
return false;
} else {
Object this$name = this.getName();
Object other$name = other.getName();
if (this$name == null) {
if (other$name != null) {
return false;
}
} else if (!this$name.equals(other$name)) {
return false;
}
return true;
}
}
}
protected boolean canEqual(Object other) {
return other instanceof User;
}
public int hashCode() {
int PRIME = true;
int result = 1;
int result = result * 59 + this.getId();
Object $name = this.getName();
result = result * 59 + ($name == null ? 43 : $name.hashCode());
return result;
}
public String toString() {
return "User(id=" + this.getId() + ", name=" + this.getName() + ")";
}
}