Tengo un método llamado validateData
en mi Parent
clase. En mi Child
clase 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 sum
se puede escribir incorrectamente, el performData
de la clase hija puede ser llamado de todos modos. Cómo evitar esto? Tenía una idea que validateData
necesita regresar boolean
y en mi clase hija puedo comprobar a través super
de 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?
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()
public
que 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
false
comparaciones.
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);
}
}