que tienen la clase siguiente:¿Validar campos tanto en el constructor como en el setter es considerado un código redundante malo?
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;
}
}
Si notas que setName y setId comparten la misma validación de sus campos con el constructor. ¿Este código redundante podría causar problemas en el futuro (por ejemplo, si alguien edita el setter para permitir 0 para el id y evitar -1 en su lugar, pero no cambió el constructor)? . ¿Debo usar un método privado para hacer el control y compartirlo entre el constructor y el colocador, que parece demasiado si hay muchos campos?
Nota: Esta es la razón por la que no estoy usando los setters en el constructor. https://stackoverflow.com/a/4893604/302707
Use setters en ctors Si usted está preocupado. –
O (en caso de que no se pueda llamar a un colocador desde Constructor), pase la lógica de validación a un método privado compartido. – SJuan76
¿Qué pasa con el constructor 'privado' y la validación en el getter? – mre