При обработке своих аннотаций Lombok не учитывает порядок этих аннотаций в исходном файле. Вместо этого каждый тип аннотации имеет приоритет, который определяет порядок обработки. Это потому, что существуют зависимости между различными типами аннотаций.
@Builder
имеет более высокий приоритет, чем @Value
. Таким образом, Lombok сначала генерирует конструктор all-args для частного пакета, необходимый для компоновщика. В результате при обработке @Value
уже присутствует конструктор. Согласно документации @Value
, "любой явный конструктор, независимо от списка аргументов, подразумевает, что lombok не будет генерировать конструктор".
Однако, на мой взгляд, это немного вводит в заблуждение в документации. Конструктор, сгенерированный для @Builder
, больше похож на детали реализации, но я бы не назвал это «явным конструктором». (Под «явным» авторы, вероятно, подразумевают «не конструктор по умолчанию».)
Как только вы добавите @RequiredArgsConstructor
или @AllArgsConstructor
(что в данном случае тоже самое), конструктор станет общедоступным, и ни @Builder
, ни @Value
не будут генерировать его больше.