Lombok:缺少生成的构造函数?

Lombok: generated constructor missing?

对于此代码:

@Data
@Entity
@AllArgsConstructor
public class Person {

    private @GeneratedValue @Id Long id;
    private final String firstname;
    private String middlename;
    private final String lastname;
}

Lombok (v. 1.16.14) 应该生成两个构造函数。首先,由于@Data:

public Person(String firstname, String lastname) { ... }

由于@AllArgsConstructor,还应该有:

public Person(Long id, String firstname, String middlename, String lastname);

然而,第一个(两个参数)构造函数"disappears"在添加@AllArgsConstructor注解时。 @Data 的 javadoc 指出:

Equivalent to @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode.

所以我认为两个参数 ctor 应该在那里是不是错了?这有一个非常简单的解决方法,因为如果显式添加 @RequiredArgsConstructor 注释:

@Data
@Entity
@AllArgsConstructor
@RequiredArgsConstructor
public class Person {

    private @GeneratedValue @Id Long id;
    private final String firstname;
    private String middlename;
    private final String lastname;
}

两个 ctors 都可用。然而,这种行为对我来说几乎没有意义,所以我希望有人能解释这是一个错误还是一个功能!

@Data 仅在有 none 时生成构造函数。

The documentation 说:“@Data 就像在 class(除了如果存在任何显式编写的构造函数,则不会生成任何构造函数)。”您的 @AllArgsConstructor 算作明确编写的构造函数。

这是一项功能。

披露:我是 Lombok 开发人员。