我有这个实体类(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/