您可以定义一个接口,Checker
提供一个check
在这种情况下引发异常的方法。您的代码可以更改为类似
public interface Checker {
void check() throws ValidationException;
}
public class YourClass {
private List<Checker> checkers; // initialize through (dependency inhecjetd?) constructor parameter or by simply enumerating checker in the constructor; I personally prefer the first way
public void yourMethod() {
for(Checkech checker : checkers) {
checker.check();
}
}
}
您显然可以向check
方法添加参数以提供要验证的数据...
更新
如果您确实可以控制条件检查实现,则可以切换到类似的内容(请参阅@Alberto Venturini 的评论):
public interface Checker {
boolean check();
String message();
}
public class YourClass {
private List<Checker> checkers; // initialize through (dependency inhecjetd?) constructor parameter or by simply enumerating checker in the constructor; I personally prefer the first way
public void yourMethod() {
for(Checkech checker : checkers) {
if(!checker.check()) {
throw new ValidationException(checker.message());
}
}
}
}
您可以使用维护检查条件和相应错误消息之间关联Checker
的变量来实现第一个定义的类似解决方案,但我绝对更喜欢@Alberto Venturini 提出的多态方法。Map<String, Checker>
我希望这种方法可以帮助您将代码移向更加开放封闭的解决方案!