JavaRush /Java Blog /Random-KO /롬복 도서관
Сергей
레벨 40
Москва

롬복 도서관

Random-KO 그룹에 게시되었습니다
Lombok 라이브러리는 작성되는 코드의 양을 줄여 가독성을 향상시킵니다. 롬복 도서관 - 1사용 예. 세 가지 분야로 구성된 정규 수업 Person:
public class Person {

    private String name;
    private int age;
    private Cat cat;

    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;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name) &&
                Objects.equals(cat, person.cat);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, cat);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cat=" + cat +
                '}';
    }
}
롬복도 마찬가지
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
많은 코드를 제거했지만 모든 메서드와 수정자는 그대로 남아 있습니다. 작동 방식. Lombok은 컴파일 타임에 코드를 생성합니다. Lombok 라이브러리 자체가 런타임에 누락되었습니다. 이를 사용해도 프로그램 크기가 증가하지 않습니다. Lombok을 사용할 때 우리의 소스 코드는 유효한 Java 코드가 아닙니다. 따라서 IDE용 플러그인을 설치해야 합니다. 그렇지 않으면 개발 환경에서 해당 플러그인이 무엇을 다루고 있는지 이해하지 못할 것입니다. Lombok은 모든 주요 Java IDE를 지원합니다. 통합은 원활합니다. "사용법 표시" 및 "구현으로 이동"과 같은 모든 기능은 이전과 같이 계속 작동하여 적절한 필드/클래스로 이동합니다. 따라서 간단한 클래스의 경우 주석을 사용할 수 있습니다 @Data. @Data- 생성자, getter, setter, 메소드를 생성 equals합니다 hashCode. toString객체를 불변으로 만드는 방법이 있습니다 @Value. @Value- 생성자를 생성합니다. getter, 메소드만 equals생성 합니다 hashCode. toString또한 모든 필드 privatefinal.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@With주석 과 .work는 불변 클래스와 잘 작동합니다 @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
불변 객체의 필드를 변경하려면 변경된 매개변수 하나를 사용하여 이 객체의 복제본을 만들어야 합니다. @With- 하나의 변경된 필드가 있는 객체의 복제본을 만드는 각 필드에 대한 메서드를 추가합니다.
Cat anotherCat = cat.withName("Vasya");
anotherCatcat- 필드 값을 제외하고 필드 값이 의 값과 동일한 새 개체입니다 name. @Builder- 체인을 따라 객체를 초기화하는 방법을 생성합니다. 이는 모든 매개변수가 포함된 생성자를 사용하고 싶지 않을 때 편리합니다(클래스가 불변인 경우 모든 매개변수가 포함된 단일 생성자가 있음).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
메소드의 순환 호출 객체가 양방향 통신을 하는 경우, 즉 서로 참조한 후 메소드를 사용하면 오류가 발생 toString합니다 . 왜냐하면 중첩된 개체의 메서드에 대한 순환 호출이 발생합니다. 이 코드는 오류를 발생시킵니다: equalshashCodeStackOverflowError
public class Main {

    public static void main(String[] args) {
        Person person = new Person();

        Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();

        person.setName("Ivan");
        person.setAge(26);
        person.setCat(cat);

        System.out.println(person);
        System.out.println(cat);
    }
}
문제에 대한 해결책은 메서드에서 필드를 제거하여 순환 호출을 중단하는 것입니다. @ToString.Exclude- 메소드에서 필드 제외 toString @EqualsAndHashCode.Exclude- 메소드에서 필드 equals제외hashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
몇 가지 더 유용한 주석 @Slf4j- 클래스에 로거 추가 @SneakyThrows- 확인된 예외를 선택 취소함
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
개별적으로 주석 달기 어떤 이유로 특정 방법만 필요한 경우
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
롬복 도서관 - 2<h2>결론</h2>이것들은 기본적인 롬복 주석일 뿐이지만 가장 일반적으로 사용되며 가장 큰 효과를 발휘합니다. 코드 생성에도 너무 열중해서는 안 됩니다. <h2>링크</h2>
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION