gpt4 book ai didi

java - 如果基本方法失败,如何打破重写的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:02 26 4
gpt4 key购买 nike

我的 Parent 类中有一个名为 validateData 的方法。在我的 Child 类中,我覆盖了该方法并添加了一些额外的功能。如果一切正常,我需要调用名为 sendData() 的方法。这是我的 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);

}
}

所以,问题是,即使sum可以写错,子类的performData还是可以调用的。如何防止这种情况?我有一个想法 validateData 需要返回 boolean 并且在我的子类中我检查了 super 关键字。但我认为这是个坏主意。那么,如果基方法失败,如何打破被覆盖的方法呢?

最佳答案

我建议你让你的 performData() 检查验证是否正常,这样会容易很多。您可能还希望使 performData() public 可以在类外访问。

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);
}
}

最后,在验证失败的情况下抛出异常也可能更容易,这将节省一些 true false 比较。

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);
}
}

关于java - 如果基本方法失败,如何打破重写的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com