我想重构以下代码:
public Credito(String numero, String titular, LocalDate fechacaducidad, double credito, int marcainternacional,
String nombreentidad, int ccv) {
mNumero = numero;
mTitular = titular;
mFechaDeCaducidad = fechacaducidad;
mCredito = credito;
mMovimientos = new Vector<Movimiento>();
mMarcaInternacional = marcainternacional;
setmNombreEntidad(nombreentidad);
setmCCV(ccv);
}
public Credito(String numero, String titular, LocalDate fechacaducidad, int tipo, int marcainternacional,
String nombreentidad, int ccv) {
mNumero = numero;
mTitular = titular;
mFechaDeCaducidad = fechacaducidad;
mTipo = tipo;
mCredito = calcularCredito(mTipo);
mMovimientos = new Vector<Movimiento>();
mMarcaInternacional = marcainternacional;
setmNombreEntidad(nombreentidad);
setmCCV(ccv);
}
如何同时拥有两个构造函数并且不执行代码?
答案 0 :(得分:6)
如何同时拥有两个构造函数并且不执行代码?
有两种方式:
有一个私有的构造函数,它们都与公共部分链接在一起,然后在调用之后让每个构造函数都自己做。例如:
private Credito(String numero, String titular, LocalDate fechacaducidad, int marcainternacional,
String nombreentidad, int ccv) {
mNumero = numero;
mTitular = titular;
mFechaDeCaducidad = fechacaducidad;
mMovimientos = new Vector<Movimiento>();
mMarcaInternacional = marcainternacional;
setmNombreEntidad(nombreentidad); // *** See warning
setmCCV(ccv); // *** See warning
}
public Credito(String numero, String titular, LocalDate fechacaducidad, double credito, int marcainternacional,
String nombreentidad, int ccv) {
this(numero, titular, fechacaducidad, marcainternacional, nombreentidad, ccv);
mCredito = credito;
}
public Credito(String numero, String titular, LocalDate fechacaducidad, int tipo, int marcainternacional,
String nombreentidad, int ccv) {
this(numero, titular, fechacaducidad, marcainternacional, nombreentidad, ccv);
mTipo = tipo;
mCredito = calcularCredito(mTipo);
}
Re See warning
- 一般来说,由于各种原因,从构造函数调用方法会出现问题; see this question's answers了解更多信息。
使用builder pattern,考虑到你有多少参数,这可能会很有用。更多this answer和(不那么)this question's answers。
答案 1 :(得分:1)
第二个构造函数可以简单地变为:
public Credito(String numero, String titular, LocalDate fechacaducidad, int tipo, int marcainternacional,
String nombreentidad, int ccv) {
this(numero, titular, fechacaducidad, calcularCredito(mTipo), marcainternacional, nombreentidad, ccv);
}
答案 2 :(得分:0)
你可以使用这样的东西。
public Credito(String numero, String titular, LocalDate fechacaducidad, double credito, int marcainternacional,
String nombreentidad, int ccv) {
mCredito = credito;
setmNombreEntidad(nombreentidad);
commonFunction(numero, titular, fechacaducidad, marcainternacional, nombreentidad, ccv);
}
public Credito(String numero, String titular, LocalDate fechacaducidad, int tipo, int marcainternacional,
String nombreentidad, int ccv) {
mTipo = tipo;
mCredito = calcularCredito(mTipo);
setmNombreEntidad(nombreentidad);
commonFunction(numero, titular, fechacaducidad, marcainternacional, nombreentidad, ccv);
}
private void commonFunction(String numero, String titular, LocalDate fechacaducidad, int marcainternacional,
String nombreentidad, int ccv) {
mNumero = numero;
mTitular = titular;
mFechaDeCaducidad = fechacaducidad;
mMovimientos = new Vector<Movimiento>();
mMarcaInternacional = marcainternacional;
setmCCV(ccv);
}