Java代码模块化,检查是否全为空
有没有干净的方法来检查它们是否都为空,例如 getDescription()、getName()、getScript()、getTargets() 和 getTrigger() 是否为空,检查一行?
ruleBean.setDescription(rule.getDescription());
} else if (rule.getName() != null) {
ruleBean.setName(rule.getName());
} else if (rule.getScript() != null) {
ruleBean.setScript(rule.getScript());
} else if (rule.getTargets() != null) {
ruleBean.setTargets(rule.getTargets());
} else if (rule.getTrigger() != null) {
ruleBean.setTrigger(rule.getTrigger());
} else {
return ResponseBean.builder().withData(request.getData())
.withMessage("No data provided for rule update").asFailure().build();
} ```
回答
您可以使用以下命令编写单个条件Optional:
if (rule.getName() != null) {
ruleBean.setName(rule.getName());
}
变成:
Optional.ofNullable(rule.getName()).ifPresent(ruleBean::setName);
但是,将其链接起来以提供您拥有的“if else”行为更加困难。
看起来您尝试使用“if/else”检测的是是否执行了某些更新。要实现这一点,您可以使用如下方法:
<T> boolean did(T value, Consumer<? super T> consumer) {
if (value == null) return false;
consumer.accept(value);
return true;
}
然后你可以把你的链写成:
boolean didSomething =
did(rule.getName(), ruleBean::setName)
|| did(rule.getScript(), ruleBean::setScript) /* etc */;
if (!didSomething) {
// Return your error response.
}
由于 的短路行为||,这将在第一次调用did“做了”某事后停止,例如 if/else if。
如果您真的想对任何非空值应用更新,只需更改||为|. didSomething如果没有任何条件匹配,则的值仍然为假,就像以前一样。