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

10-10 03:18