我在互联网上找到了这个代码,并用伪改写它以便更具可读性。
对于糟糕/良好的做法,常识等,我不能忘记它有什么问题。而且我不是在谈论太多的回报而不是关于抛出异常的事实。它是围绕流程构建方法的方式。
如果一个方法关闭代码并且在成功或n / a的情况下不断发生并且只有在没有任何东西让他返回时它看起来很奇怪,它最终会失败。与
非常相似/完全相同switch {
case: validationNotNeeded;break;
case: validationNotApplicable;break;
case: validationSuccessful;break;
default: throw new Exception()
}
方法(顺便说一句,该方法也可以是非空的,然后返回将是某个对象左右):
public void validateSomething(String param1, String param2)
throws ValidationException {
if (param1 == null || param2 == null) {
// no validation needed or cannot be performed
return;
}
String someValue = someLogicToGetIt();
if (someValue == null) {
// no validation needed or cannot be done
return;
}
if (someValue == "<expectedValue>") {
// validation successful
return;
}
// obviously validation did not succeed
throw new ValidationException();
}
所以,我只是有这种感觉,或者有一些明确的不良实践规则,完全是指这种方法,比如反模式“类似于开关的突破到默认抛出异常”或者这只是反模式的组合“太多返回流量控制的“和”例外“
答案 0 :(得分:1)
这真的归结为原始开发者的意图。
他们可能需要在someValue != "<expectedValue>"
也许他们有
try
{
validateSomething(param1, param2)
}
catch (ValidationException e)
{
//do stuff here
}
他们的代码中的其他地方。虽然它可能不被视为最佳实践,但在最初实施时它们可能有理由。