gpt4 book ai didi

java - 如何避免代码重复在子类中进行输入验证

转载 作者:行者123 更新时间:2023-11-30 08:12:33 26 4
gpt4 key购买 nike

我有一个抽象基类,如下所示:

public abstract class AbstractConfig {

public String someMethod(List<Params> params) {
if (inputValidationFails()) { /* sanity check of params */
return null;
}
return something;
}
}

我有执行相同输入验证的子类。

public class CustomConfig extends AbstractConfig {
@Override
public String someMethod(List<Params> params) {
if (inputValidationFails()) { /*same input validation code*/
return null;
}

return somethingElse;
}
}

我怎样才能避免在基类和每个子类中都必须实现这种输入验证?在AbstractConfig 中实现[非私有(private)] 辅助方法inputValidationFails() 并在基类和每个子类中调用它似乎不是特别好或干净。

最佳答案

我建议您将您的方法拆分为两个单独的方法,一个是您在基类中实现的公共(public)方法,另一个是被另一个方法调用并在子类中实现的 protected 抽象方法。

这样你就可以实现适用于基类中所有子类的东西,避免代码重复。生成的基类看起来像这样:

public abstract class AbstractConfig {

public String doStuff(List<Params> params) {
if (performErrorChecks()) {
return doTheActualStuff(params);
}
return null;
}

protected abstract String doTheActualStuff(List<Params> params);
}

子类将只实现doTheActualStuff():

public class CustomConfig extends AbstractConfig {

@Override
protected String doTheActualStuff(List<Params> params) {
...
}
}

您还可以在 AbstractConfig 中将 doStuff() 声明为 final。这还将防止任何子类重写 doStuff() 并意外替换您的常见错误检查。

关于java - 如何避免代码重复在子类中进行输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30380321/

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