2017-02-08 5 views
1

@RequiredArgsConstructorがない最終フィールドが存在しない空のコンストラクタを生成ロンボク注釈whith空のコンストラクタを生成しない、このコードは、エラーなしでコンパイル引数なしのコンストラクタが定義されていないので@DataRequiredArgsConstructorを生成しなければならないが、次のコードでロンボク@Dataがない最終フィールド

import lombok.Data; 

@Data 
public class LombokTest { 

    public LombokTest(String a) { 
     // to avoid creation of the default constructor by the Java compiler 
    } 

    public static void main(String[] args) { 
     new LombokTest(); 
    } 
} 

メインメソッドで新しいLombokTest()はエラーが発生します。

これはLombokのバグですか?

答えて

1

ロンボクのバグではないと思います。 @Dataをクラスに置くと、空のコンストラクタは他のコンストラクタがない場合にのみ生成されます。

@AllArgsConstructorと@Dataをクラスに入れても同じです。すべての引数を持つコンストラクタが生成されるため、空のコンストラクタは生成されません。

@NoArgsConstructorを追加すると、空のコンストラクタを生成できます。

+0

デフォルトの空のコンストラクタは、Javaコンパイラによって生成され、Lombokでは生成されません。 Lombokのドキュメントには、「@Dataは、@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructorの機能をまとめた便利なショートカットアノテーションです。したがって、必ず空のコンストラクタであるRequiredArgsConstructorを生成する必要がありますこの場合。 – balage

+0

はいemtpy construtorはJavaによって生成されますが、あなたが他のコンストラクタを持っていない場合にのみ生成されます:lombokはこの原則に従います... – rlm

+0

そのため、両方のケースで明示的なコンストラクタを追加したので、Lombokの動作に集中できます。 – balage

関連する問題