java - 使用类似参数重构构造函数

标签 java refactoring

我想重构以下代码:

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. 有一个私有(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了解更多。

  2. 使用builder pattern ,无论如何,考虑到你有多少个参数,这可能很有用。更多内容请参见this answer和(不太如此)this question's answers .

关于java - 使用类似参数重构构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50007808/

相关文章:

java - 将代码重构为只有 return 语句

java - Eclipse 重命名不能完全工作

java - Eclipse 中的错误-找不到主类

java - 类文件常量池中存在非法 UTF8 字符串

java - java中大文件读取不一致

java - 连续调用 Volley 时出现 outofmemoryException

java - 初始化变量。我不知道他们的类型 [java]

java - boolean 多返回重构

javascript - 提取代码并将其放入另一个函数中

java - 返回值反转