주석. 조금 지루한 1부 이 부분에서는 소스 주석의 대표적인 대표자로 잘 알려진 Lombok 라이브러리를 다루기로 결정했습니다. 다음 기사에서는 런타임 주석을 사용합니다. 옛날에 자바 프로그래머가 있었는데, 그는 매일 다음과 같은 일반적인 코드를 작성했습니다.
다음 내용은 짧은 소개와 자세한 내용에 대한 링크이기 때문에 독자 여러분이 흥미로웠기를 바랍니다. Lombok은 생성을 사용자 정의할 수 있는 기회도 제공합니다. 모든 getter, setter 또는 해시 코드를 항상 다르게 생성할 필요는 없습니다. 따라서 별도의 주석이 있습니다(많은 주석에는 설명이 필요하지 않다고 생각합니다) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor 및 @AllArgsConstructor @Log 이것들은 가장 일반적인 주석이며 전체 세트를 볼 수 있습니다 . 여기서 var와 val은 특별한 주의를 기울일 가치가 있습니다. 다음과 같이 작성할 수 있습니다.
package lombok;
public class Chelovek {
private String name;
private int age;
public Chelovek(String name, int age) {
this.name = name;
this.age = age;
}
public Chelovek() {
}
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;
Chelovek chelovek = (Chelovek) o;
if (age != chelovek.age) return false;
return name != null ? name.equals(chelovek.name) : chelovek.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return "Chelovek{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
이는 2개의 필드만 있는 일반적인 클래스입니다(그러나 때로는 10-15개 이상의 필드가 있는 경우도 있음). 예, 물론 이 모든 것이 IDE에서 생성될 수 있지만 젠장, 공간을 차지합니다. 15~20개의 필드가 있는 경우 모두 getter, setter, 생성자가 필요합니다. 이 모든 것 중에서 눈에 보이지 않는 몇 가지 다른 메서드는 쉽게 길을 잃을 수 있습니다. 그러한 프로그래머가 더 빨리, 더 적게 작성하도록 어떻게 도울 수 있습니까? 롬복. 동일한 클래스이지만 Lombok을 사용하여 곧바로 더위에 들어갑니다.
package lombok;
@Data
public class Chelovek {
private String name;
private int age;
}
예, 그게 전부입니다. 시원한? @Data 주석은 무엇 을 합니까 ? 컴파일 단계에서는 모든 필드에 대한 getter/setter, toString을 생성하고 표준에 따라 같음 및 hashCode를 재정의합니다. IDE에 플러그인을 설치하면 아직 생성되지 않은 모든 메소드가 표시됩니다.
package lombok;
import lombok.experimental.var;
@Data
public class Chelovek {
private String name;
private int age;
public static void main(String[] args) {
var chelovek = new Chelovek();
chelovek.setAge(22);
System.out.println(chelovek);
}
}
이것이 왜 필요한가요? 예를 들어 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이 인기가 많습니다. >5000개의 별과 >1000개의 포크. Spring은 수업에서 롬복을 사용합니다. 프로젝트에 스프링이 있다면 찾아보세요. 아마도 롬복을 끌어올렸을 수도 있지만 여러분은 모릅니다.
GO TO FULL VERSION