【问题标题】:Lombok: generated constructor missing?Lombok:生成的构造函数丢失?
【发布时间】:2017-04-26 19:00:46
【问题描述】:

对于此代码:

@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);

但是,当添加@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;
}

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

【问题讨论】:

    标签: lombok


    【解决方案1】:

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

    The documentation 说:“@Data 就像在类上具有隐式 @Getter、@Setter、@ToString、@EqualsAndHashCode 和 @RequiredArgsConstructor 注释(除非存在任何显式编写的构造函数,则不会生成构造函数)。”您的 @AllArgsConstructor 算作明确编写的构造函数。

    这是一项功能。

    披露:我是 Lombok 开发人员。

    【讨论】:

    • 感谢您的澄清!
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 2016-12-09
    • 2021-12-15
    • 1970-01-01
    • 2019-08-21
    • 2020-12-09
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多