gpt4 book ai didi

java - 在实体类的构造函数中使用setter

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:51 24 4
gpt4 key购买 nike

我有这个实体类(Netbeans 8):

@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String name;

public User() {}

public User(String name) {
this.setName(name);
}

public void setName(String name) {
this.name = name;
}

}

编译器警告我不应在构造函数中调用可重写的方法,并且我理解其背后的原因。

我无法将类设为final,因为它是一个实体,并且将setter 设为final 会发出警告:“持久属性的setter 方法不得为final。”

当然,我可以直接分配字段,但 setter 会执行我不想在构造函数中复制的验证。

有什么方法可以做到这一点吗?

最佳答案

使用静态工厂方法

@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String name;

public User() {}

public static User createUser(String name) {
User result = new User();
result.setName(name);
return result;
}

public void setName(String name) {
this.name = name;
}

}

无法从子类构造函数调用此方法,因此不会出现有关可重写 setter 的警告。

关于java - 在实体类的构造函数中使用setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com