Java for Beginner
675 subscribers
560 photos
156 videos
12 files
859 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Аннотации для работы с коллекциями

Аннотация @Builder

Эта аннотация реализует паттерн Builder, который позволяет создавать объекты через цепочку вызовов. Это особенно полезно для классов с большим количеством полей.

Пример использования:
import lombok.Builder;

@Builder
public class User {
private String name;
private int age;
}

// Использование:
User user = User.builder()
.name("John")
.age(30)
.build();


Как это работает:
Lombok генерирует внутренний класс UserBuilder с методами для каждого поля. В результате вы можете создавать объекты через цепочку вызовов, что делает код более читаемым.

Сгенерированный код:

public class User {
private String name;
private int age;

User(String name, int age) {
this.name = name;
this.age = age;
}

public static UserBuilder builder() {
return new UserBuilder();
}

public static class UserBuilder {
private String name;
private int age;

UserBuilder() {}

public UserBuilder name(String name) {
this.name = name;
return this;
}

public UserBuilder age(int age) {
this.age = age;
return this;
}

public User build() {
return new User(name, age);
}
}
}


Нюансы:
Можно использовать параметр builderMethodName, чтобы изменить имя метода builder():
@Builder(builderMethodName = "create")
public class User {
private String name;
private int age;
}

// Использование:
User user = User.create().name("John").age(30).build();
Если класс содержит final-поля, Lombok автоматически добавит их в билдер.


Аннотация @Singular

Эта аннотация используется вместе с @Builder для удобного добавления элементов в коллекции. Она генерирует методы для добавления элементов по одному.

Пример использования:
import lombok.Builder;
import lombok.Singular;
import java.util.List;

@Builder
public class User {
private String name;
@Singular
private List<String> hobbies;
}

// Использование:
User user = User.builder()
.name("John")
.hobby("Reading")
.hobby("Swimming")
.build();


Как это работает:
Lombok генерирует методы для добавления элементов в коллекцию. Например, для поля hobbies будет создан метод hobby(String hobby).

Сгенерированный код:
public class User {
private String name;
private List<String> hobbies;

User(String name, List<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}

public static UserBuilder builder() {
return new UserBuilder();
}

public static class UserBuilder {
private String name;
private List<String> hobbies = new ArrayList<>();

UserBuilder() {}

public UserBuilder name(String name) {
this.name = name;
return this;
}

public UserBuilder hobby(String hobby) {
this.hobbies.add(hobby);
return this;
}

public User build() {
return new User(name, hobbies);
}
}
}


Нюансы:
Lombok автоматически определяет тип коллекции и генерирует соответствующие методы.
Можно использовать параметр value, чтобы изменить имя метода:
@Singular("interest")
private List<String> hobbies;

// Использование:
User user = User.builder().interest("Reading").interest("Swimming").build();


#Java #Training #Spring #Lombok #Singular #Builder