CodeGym/Java Blog/무작위의/주석. 2부. 롬복
John Squirrels
레벨 41
San Francisco

주석. 2부. 롬복

무작위의 그룹에 게시되었습니다
회원
주석. 1부 - 약간 지루함 이 부분에서는 소스 코드 주석의 잘 알려진 대표자인 Lombok 라이브러리를 다루기로 결정했습니다. 다음 기사에서는 런타임 주석을 다루겠습니다. 주석.  2부. 롬복 - 1옛날에 자바 프로그래머가 있었습니다. 그녀는 매일 다음과 같은 일반적인 코드를 작성했습니다.
package lombok;

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

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

    public Person() {
    }

    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 boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
이 클래스는 일반적입니다. 필드가 2개뿐입니다(결국 필드가 10~15개가 넘는 경우도 있습니다). 물론 이 모든 것은 IDE에서 생성될 수 있습니다. 하지만 젠장, 그게 그 자리를 차지합니다. 15-20개의 필드가 있는 경우 각 필드에는 getter, setter, 생성자가 필요합니다. 이 모든 것 중에서 눈에 보이지 않는 몇 가지 다른 메서드는 쉽게 손실될 수 있습니다. 이 프로그래머가 더 빠르고 덜 작성하도록 어떻게 도울 수 있습니까? 롬복. 프라이팬에서 나와 불 속으로. 여기에 동일한 클래스가 있지만 이제 Lombok을 사용합니다.
package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
그게 다야. 멋지죠? @Data 주석의 기능 은 무엇인가요 ? 컴파일하는 동안 이 주석은 모든 필드에 대한 getter/setter를 생성하고 표준 규칙에 따라 toString(), equals() 및 hashCode()를 재정의합니다. IDE에 플러그인을 설치할 수 있습니다. 아직 생성되지 않은 메서드가 모두 표시됩니다. 주석.  2부. 롬복 - 2이 시점에서 독자 여러분의 관심이 있기를 바랍니다. 다음 내용은 세부 사항에 대한 링크와 함께 간략한 소개가 될 것이기 때문입니다. Lombok을 사용하면 코드 생성을 사용자 정의할 수도 있습니다. 예를 들어 모든 getter 및 setter가 항상 필요한 것은 아니며 해시 코드를 생성하려면 다른 알고리즘이 필요할 수도 있습니다. 이를 달성하기 위해 별도의 주석이 있습니다(많은 주석에는 설명이 필요하지 않을 것 같습니다): @Getter/@Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @RequiredArgsConstructor 및 @AllArgsConstructor, @Log 흔한. 전체 세트는 여기서 볼 수 있습니다 . var 및 val에 특별한 주의를 기울이십시오. 이는 다음과 같은 코드를 작성할 수 있음을 의미합니다.
package lombok;

import lombok.experimental.var;

@Data
public class Person {
    private String name;
    private int age;

    public static void main(String[] args) {
        var person = new Person();
        person.setAge(22);
        System.out.println(person);
    }
}
이것이 왜 필요한가요? 예를 들어 RandomAccessFileChannel 클래스가 있습니다. 왜 우리는 이런 코드를 작성하고 싶을까요?
RandomAccessFileChannel channel = new RandomAccessFileChannel();
우리가 이것을 할 수 있다면?
var channel2 = new RandomAccessFileChannel();
내 생각에는 이것이 항상 받아들여지는 것은 아니다. 예를 들어, 사악한 지도를 반환하는 사악한 메소드가 있습니다:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap() {
    return new HashMap<>();
}
다음과 같이 호출하면:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
그렇다면 우리가 무엇을 하고 있는지는 어느 정도 명확해집니다. 호출이 다음과 같은 경우:
var listSetMap = evilMap();
그러면 악마만이 evilMap()이 거기에서 무엇을 반환할지 알 수 있으며 메서드 자체를 볼 때까지는 알 수 없습니다. 왜 소스 파일을 돌아다니나요? 일반적으로 이에 주의해야 합니다. 실험 분기: 여기에서는 @UtilityClass 주석을 언급하고 싶습니다 . 예외를 발생시키는 비공개 생성자를 생성합니다(그래서 지저분한 작은 손은 거기에 간섭하기 위해 리플렉션을 사용하지 않습니다). 그리고 수업이 시작될 때 매우 아름답습니다. 유틸리티 메소드가 있다는 것을 알려주는 것입니다. @Delegate 주석은 위임 패턴을 구현합니다 . 어떤 것을 다른 클래스에 위임하는 클래스가 있고 일부 메서드만 변경한다고 가정해 보겠습니다. 이 주석을 사용하면 메서드가 중복되는 것을 방지하고 해당 메서드를 추적할 수 있습니다. 메소드를 제거하거나 추가하면 이 주석이 이를 알 수 있습니다. 실험적 주석 분기 GitHub 공식 웹사이트 IDE가 lombok에서 제대로 작동하고 존재하지 않는 메서드를 강조 표시하지 않으려면 플러그인을 설치해야 합니다. 공식 웹사이트에는 각 IDE에 대한 플러그인을 연결하는 방법을 확인할 수 있는 설정 섹션이 있습니다. 보시다시피, lombok은 인기가 많습니다. 별이 5,000개 이상이고 포크가 1,000개 이상입니다. Spring은 클래스에서 lombok을 사용합니다. 프로젝트에 Spring이 있다면 살펴보세요. 여러분도 모르는 사이에 lombok이 도입되었을 수도 있습니다.
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다