Si tengo una clase de cliente con un constructor sobrecargado (predeterminado y uno con params) ¿cuál es la manera correcta de establecer los miembros de la clase en el constructor sobrecargado? ¿Usando "esto" referencias o usando los métodos setter?Mejor práctica de clase
Simplemente no estaba seguro de cuál era el método correcto.
public class Customer {
private String firstName;
private String lastName;
private int age;
public Customer() {}
//This Way
public Customer(String firstName, String lastName, int age)
{
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
// Or this way?
public Customer(String firstName, String lastName, int age)
{
setFirstName(firstName);
setLastName(lastName);
setAge(age);
}
/**
* @return the firstName
*/
public String getFirstName() {
return firstName;
}
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
}
Esta es la única respuesta sensata hasta el momento. Varias herramientas de pelusa, de hecho, advierten acerca de llamar métodos no finales de los constructores debido a exactamente este problema. (Si la clase no es definitiva, pero sí lo son los métodos setter, es igual de buena). –
@KumarVivekMitra - No me gusta su respuesta, como indica mi comentario al respecto. –
@TedHopp por favor, lea mi respuesta de nuevo ... creo que los dos estamos hablando de la misma cosa ... todavía déjenme escribir de nuevo aquí ... Creo que están tomando el principio de 'OCP', Las clases están abiertas para extensión, pero están cerradas para modificación ... Y como sé 'Constructores no se pueden heredar, por lo que NO PUEDEN anularse, por lo que es inmutable ....' –