2017-10-10 1 views
2

lombokを使用しています.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ロンボク@Builderfeatureです。これはかなりcoolですが、ビルダーの場合は1、コレクションのみの場合は2です。

私はあなたの構造を平らにすることを考えます。 BookDetailを使用すると、それはもっと複雑になり、私はそれが私に大きな利点を他のところに提供した場合にのみそれをやります。

設定可能な変更可能なフィールドを持つと、descriptionを変更する方法が2通りあります。getBookDetail().setDescription(....)またはsetBookDetail(....)のいずれかを変更することができます。

ゲッターとセッターでBookDetailをクローンしたい場合があります(ロンボクではできません)。


別のオプションはBookDetail(代わりに@Data@Value)を作り、@Witherの代わり@Setterを使用しています。これは、(あなたのケースでそうおそらく、ないエンティティのために、一般的ではありません)descriptionかなり不便

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

を変更しますが、時には、それ価値があるかもしれません。私はロンボクがそれをサポートしていれば大好きですが、あなたが望んでいたものと全く同じではないでしょう。別のクラスへのアクセスが必要です。コンパイル段階では非常に問題です。

関連する問題