2017-10-10 1 views
2

lombok을 사용하고 있습니다. 두 클래스가 있다고 가정합니다.롬복을 사용하여 필드의 필드에 액세스

@Data 
@AllArgsConstructor 
class Book { 
    private String name; 
    private BookDetail bookDetail; 
} 

@Data 
@AllArgsConstructor 
public class BookDetail { 
    private String description; 
    private String author; 
} 

이제 이런 책을 쓸 수 있습니다.

Book book = new Book("name1", new BookDetail("description1", "author1")); 
System.out.println(book.getBookDetail().getAuthor()); 

이이 같은 직접 저자를 얻을 수있는 방법은 중복의 비트가 있습니까?

Book book = new Book("name1", new BookDetail("description1", "author1")); 
System.out.println(book.getAuthor()); 
+1

왜 손으로 직접 작성하지 않으시겠습니까? 'Book' 내부에'getAuthor' 메소드를 생성하고'BookDetail # getAuthor'를 호출하는 것을 의미합니다. –

+0

@SergeyProkofiev 네, 수동으로 할 수 있습니다. 나는 롬복이 그것을 할 수있는 더 좋은 방법이 있는지 궁금합니다. – Searene

+0

나는 그들의 [features description] (https://projectlombok.org/features/)을 살펴 보았고 순수한 롬복과 함께 할 수있는 옵션이 없다. –

답변

2

이이 같은 직접 저자를 얻을 수있는 방법은 중복의 비트가 있습니까?

아니요, 롬복에서는 이와 같은 것이 없습니다. 가장 가까운 것은 @Singular Lombok @Builderfeature입니다. 꽤 cool이지만, 빌더와 컬렉션을 위해서만 1. 당신에게 도움이되지 않습니다.

구조를 평평하게 만드는 것이 좋습니다. BookDetail을 사용하면 훨씬 더 복잡해지며 다른 곳에서 나에게 큰 이점을 제공 한 경우에만 할 수 있습니다.

설정 가능한 변경 가능 필드를 사용하면 description을 어떻게 변경할 수 있는지에 대한 두 가지 가능성이 있음을 유의하십시오. getBookDetail().setDescription(....) 또는 setBookDetail(....) 중 하나를 변경하십시오.

getter 및 setter에서 BookDetail을 복제 할 수 있습니다 (Lombok이 대신 할 수 없음).


또 다른 옵션은 BookDetail (대신 @Data@Value)를 만들고 @Wither 대신 @Setter를 사용한다. 이것은 (귀하의 경우 그렇게 아마하지 엔티티, 일반적으로되지 않음) description 꽤 불편

getBookDetail(getBookDetail().withDescription(....)); 

을 변경하게 그러나 때때로, 그것은 가치가있을 수 있습니다. 나는 Lombok이 그것을 지원한다면 좋겠지 만, 당신이 원했던 것과 같지 않을 것입니다. 다른 클래스에 대한 액세스가 필요합니다. 이것은 컴파일 단계에서 매우 문제가됩니다.

관련 문제