¿Cómo romper método reemplazado si se trata de la base método falla?

neo:

Tengo un método llamado validateDataen mi Parentclase. En mi Childclase I se sobrepase el método de adición de algunas funciones adicionales. Si todo está bien, necesito llamada al método llamado sendData(). Aquí está mi código en Java:

  public class Parent {

    protected int sum;
    protected double commission;

    protected void validateData() {
        if (!isSumWrittenCorrectly()) {
            return;
        }

        performData();
    }

    private boolean isSumWrittenCorrectly() {
        if (sum < 100) {
            return false;
        }

        return true;
    }


    protected void performData() {
        commission = sum * 0.02;
    }


}


class Child extends Parent {
    private String email;

    @Override
    protected void validateData() {
        super.validateData();

        if (!isEmailWrittenCorrectly()) {
            return;
        }

        performData();
    }

    @Override
    protected void performData() {
        super.performData();


        sendData(email, commission, sum);

    }
}

Por lo tanto, el problema es que, aunque sumse puede escribir incorrectamente, el performDatade la clase hija puede ser llamado de todos modos. Cómo evitar esto? Tenía una idea que validateDatanecesita regresar booleany en mi clase hija puedo comprobar a través superde palabras clave. Pero es una mala idea que pienso. Por lo tanto, la forma de romper método reemplazado si se trata de la base método falla?

Glains:

Le sugiero que deje que su performData()cheque si la validación es bueno, que hace que sea mucho más fácil. Usted también puede hacer performData() publicque sea accesible desde fuera de la clase.

public class Parent {

    protected int sum;
    protected double commission;

    protected boolean validateData() {
        return isSumWrittenCorrectly();
    }

    private boolean isSumWrittenCorrectly() {
        if (sum < 100) {
            return false;
        }
        return true;
    }

    protected void performData() {
        if(!validateData()) {
            return;
        }
        commission = sum * 0.02;
    }
}


class Child extends Parent {

    private String email;

    @Override
    protected boolean validateData() {
        if(!super.validateData()) {
            return false;
        }
        if (!isEmailWrittenCorrectly()) {
            return false;
        }
        return true;
    }

    @Override
    protected void performData() {
        super.performData();
        if(!validateData()) {
            return;
        }
        sendData(email, commission, sum);
    }
}

Al final, también podría ser más fácil de lanzar una excepción en caso de fallo de validación, que salvará algunas true falsecomparaciones.

public class Parent {

    protected int sum;
    protected double commission;

    protected void validateData() {
        if(!isSumWrittenCorrectly()) {
            throw new IllegalArgumentException("sum is not correct");
        }
    }

    private boolean isSumWrittenCorrectly() {
        if (sum < 100) {
            return false;
        }
        return true;
    }


    protected boolean performData() {
        validateData();
        commission = sum * 0.02;
    }
}


class Child extends Parent {

    private String email;

    @Override
    protected boolean validateData() {
        super.validateData();
        if (!isEmailWrittenCorrectly()) {
            throw new IllegalArgumentException("email is not correct")
        }
    }

    @Override
    protected void performData() {
        validateData();
        super.performData();
        sendData(email, commission, sum);
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=213995&siteId=1
Recomendado
Clasificación