Refactor constructor with similar arguments
我想重构以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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?
有几种方法:
有一个私有的构造器,它们都用公共部分链接到这个构造器,然后在调用它之后让每个构造器都做自己的事情。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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-
使用构建器模式,考虑到有多少参数,这很有用。这个答案越多,这个问题的答案就越少。
第二个构造函数可以简单地成为:
1 2 3 4 |
你可以用这样的东西。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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); } |