2017-02-08 4 views
1

Ломбок аннотаций @RequiredArgsConstructor генерирует пустой конструктор, когда нет окончательных полей нет, этот код компилируется без ошибок:Ломбок @data не генерирует пустой конструктор ти без каких-либо конечных полей

import lombok.RequiredArgsConstructor; 

@RequiredArgsConstructor 
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(); 
    } 
} 

Согласно документации Ломбок, аннотации @Data также должен генерировать RequiredArgsConstructor, но в следующем коде

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() в основном методе приводит к ошибке, так как конструктор без аргументов не определен ,

Это ошибка в Ломбоке?

ответ

1

Я думаю, что это не ошибка в Ломбоке. Если вы поместите класс @Data в класс, пустой конструктор будет сгенерирован, только если у вас нет другого конструктора.

Это то же самое, если вы поместите @AllArgsConstructor и @Data в класс: пустой конструктор не будет сгенерирован, так как будет создан конструктор со всеми аргументами.

Вы можете добавить @NoArgsConstructor для создания пустого конструктора.

+0

По умолчанию пустой конструктор будет генерироваться компилятором Java, а не Lombok. Документация Lombok гласит: '@Data - это удобная сокращенная аннотация, которая объединяет функции @ToString, @EqualsAndHashCode, @Getter/@Setter и @RequiredArgsConstructor вместе ...' Поэтому он всегда должен генерировать RequiredArgsConstructor, который является пустым конструктором в этом случае. – balage

+0

Да emtpy construtor будет генерироваться Java, но только если у вас нет другого конструктора: lombok придерживается этого принципа ... – rlm

+0

Вот почему я добавил явный конструктор в обоих случаях, чтобы мы могли сосредоточиться на поведении Ломбока. – balage

Смежные вопросы