@Data如何创建构造函数

问题描述 投票:0回答:1

好的,所以我在这里读了很多问题,但仍然无法理解它是如何工作的并且没有给出错误。按照我的逻辑,如果 @Data 有final 字段,它就会创建一个RequiredConstructor。 @Entity 需要一个 noArgConstructor 所以我也做了它。 这是我的用户类:

@Data
@Entity
@NoArgsConstructor(force = true)
public class User implements UserDetails {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Long id;

    private final String username;
    private final String password;
    private final String fullname;
    private final String street;
    private final String city;
    private final String state;
    private final String zip;
    private final String phoneNumber;

}

但是现在在另一个类中,如果我想创建一个如下所示的新 User 对象,我无法做到。

public User toUser(PasswordEncoder passwordEncoder) {
        return new User(username, passwordEncoder.encode(password),
                fullname, street, city, state, zip, phone);
    }

编辑:我将 @RequiredArgConstructor 添加到 User 类中,现在它不会给我错误。问题已解决,但我不明白它是如何工作的。

java spring spring-boot spring-data-jpa lombok
1个回答
0
投票

当您添加

@NoArgsConstructor
时,它会覆盖
@RequiredArgsConstructor
中的
@Data
,这会强制您指定它。但是,如果您有最终字段,则您不想使用 NoArgsConstructor,因为在构造之后,无法设置它们,因此它们永远不会有值。

另外,请注意,您真的不想将@Data与@Entity一起使用,主要是因为它附带的EqualsAndHashcode。

© www.soinside.com 2019 - 2024. All rights reserved.