Аннотации для управления состоянием
Комбинированная аннотация @Data и нюансы использования
Аннотация @Data
Эта аннотация объединяет функциональность нескольких аннотаций:
@Getter и @Setter для всех полей.
@ToString для генерации метода toString().
@EqualsAndHashCode для генерации методов equals() и hashCode().
@RequiredArgsConstructor для генерации конструктора с обязательными полями.
Пример использования:
Как это работает:
Lombok генерирует следующие методы и конструктор:
Геттеры и сеттеры для всех полей.
Метод toString().
Методы equals() и hashCode().
Конструктор для обязательных полей (если такие есть).
Пример сгенерированного кода:
Нюансы:
Если в классе есть final-поля или поля с @NonNull, Lombok добавит конструктор для этих полей.
Аннотация @Data не генерирует конструктор по умолчанию (@NoArgsConstructor), если в классе есть final-поля.
Можно комбинировать @Data с другими аннотациями, например, @Builder, чтобы добавить дополнительные возможности.
#Java #Training #Spring #Lombok #Data
Комбинированная аннотация @Data и нюансы использования
Аннотация @Data
Эта аннотация объединяет функциональность нескольких аннотаций:
@Getter и @Setter для всех полей.
@ToString для генерации метода toString().
@EqualsAndHashCode для генерации методов equals() и hashCode().
@RequiredArgsConstructor для генерации конструктора с обязательными полями.
Пример использования:
import lombok.Data;
@Data
public class User {
private String name;
private int age;
}
Как это работает:
Lombok генерирует следующие методы и конструктор:
Геттеры и сеттеры для всех полей.
Метод toString().
Методы equals() и hashCode().
Конструктор для обязательных полей (если такие есть).
Пример сгенерированного кода:
public class User {
private String name;
private int age;
public User() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User(name=" + this.name + ", age=" + this.age + ")";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Нюансы:
Если в классе есть final-поля или поля с @NonNull, Lombok добавит конструктор для этих полей.
Аннотация @Data не генерирует конструктор по умолчанию (@NoArgsConstructor), если в классе есть final-поля.
Можно комбинировать @Data с другими аннотациями, например, @Builder, чтобы добавить дополнительные возможности.
#Java #Training #Spring #Lombok #Data