【发布时间】:2020-04-01 23:08:07
【问题描述】:
我有要执行的“用户”验证列表,每个验证都实现了 Predicate(来自 Guava)。我有以下方法填充要执行的验证列表并创建所有验证的组合谓词。
List<Validation> validations = new ArrayList();
Predicate<User> composedUserValidations;
private void setupValidations() {
validations.add(userEmailIsValid());
validations.add(userPhoneIsValid());
validations.add(userLoginIsValid());
.....
//creating composite
composedUserValidations = and(validations);
}
问题:当我将触发 apply 到composedUserValidations 并且其中一个会失败时,有没有办法找出究竟是哪一个失败了。 现在我有:
public boolean isUserValid(User user) {
if (!composedUserValidations.apply(user)) {
return false;
}
}
我想要类似的东西:
public void validateUser(User user) {
if (!composedUserValidations.apply(ticket)) {
throw new ValidationExcepction("Predicate which failed");
}
}
最好的方法是什么?
【问题讨论】: