我想重构以下代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能拥有这两个构造函数并且不需要复制代码?
我怎样才能拥有这两个构造函数并且不需要复制代码?
有两种方法:
有一个私有的构造函数,它们都与公共部分链接在一起,然后在调用之后让它们各自做一些事情.例如:
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);
}
Run Code Online (Sandbox Code Playgroud)
重新See warning- 一般来说,由于各种原因,从构造函数调用方法是有问题的; 看到这个问题的答案更多.