首页 > 解决方案 > 如何避免将结果添加到列表中的多个 if 语句

问题描述

我想问你一个想法。我有课,我有很多 if 语句,可以说它看起来像这样:

List<String> errors = new ArrayList<>();
boolean errorCodition1 = SuperUtils.calculateIfObjectIsCorrect(this); // rest of them same

if(errorCondition1){
    errors.add(errorsMessage.getSuperError());
}

if(errorCondition2){
    errors.add(errorsMessage.getMinorError());
}

if(errorCondition3){
    errors.add(errorsMessage.getAlmostCriticalError());
}

if(errorCondition4){
    errors.add(errorsMessage.getOverNineThousendError());
}

displayErrors(errors);

也许这段代码看起来不是很糟糕,但让我们假设我们需要添加更多条件。你会如何避免它?

初始化类时始终调用此代码,例如在构造函数中。

标签: javaoopdesign-patterns

解决方案


如果您使用的是 java8 及更高版本,则可以通过将 if 语句提取到函数来简化此操作:

void addToErrorsIf(boolean errorCondition, List<String> errors, Supplier<String> a) {
  if(errorCondition) {
    errors.add(a.get());
  }
}

然后你可以像这样使用它:

addToErrorsIf(errorCodition1, errors, errorsMessage::getSuperError);
addToErrorsIf(errorCodition2, errors, errorsMessage::getMinorError);
//and so on

推荐阅读