我有以下课程:
public class Project {
private int id;
private String name;
public Project(int id, String name) {
if(name == null ){
throw new NullPointerException("Name can't be null");
}
if(id == 0 ){
throw new IllegalArgumentException("id can't be zero");
}
this.name = name;
this.id = id;
}
private Project(){}
public int getId() {
return id;
}
public void setId(int id) {
if(id == 0 ){
throw new IllegalArgumentException("id can't be zero");
}
this.id = id;
}
public String getName()
return name;
}
public void setName(String name) {
if(name == null ){
throw new NullPointerException("Name can't be null");
}
this.name = name;
}
}
如果您注意到 setName 和 setId 与构造函数共享其字段的相同验证。这个冗余代码是否会在将来导致问题(例如,如果有人编辑 setter 以允许 0 为 id 并阻止 -1 但没有更改构造函数)?. 我是否应该使用私有方法进行检查并在构造函数和设置器之间共享它,如果有很多字段,这似乎太多了。
注意:这就是为什么我不在构造函数中使用设置器的原因。https://stackoverflow.com/a/4893604/302707