我想重构以下代码:
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);
}
如何才能同时拥有构造函数并且不重复代码?
最佳答案
How can I have both constructors and dont ducplicate code?
有几种方法:
有一个私有(private)构造函数,它们都与公共(public)部分链接到,然后让每个构造函数在调用它后执行自己的操作。例如:
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 .
关于java - 使用类似参数重构构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50007808/