在 Java 中防止 instanceof 和强制转换
Preventing instanceof and casting in Java
如果我想在方法签名不同的地方使用不同的验证器,如何避免在这种情况下使用 instanceof
和转换?
代码
for(BatchValidator validator : validators) {
try {
if (validator instanceof BatchErrorValidator) {
((BatchErrorValidator<T>) validator).validate(targets);
} else if (validator instanceof BatchWarningValidator) {
((BatchWarningValidator<T>) validator).validate(targets, header);
}
} catch (BatchValidationException e) {
handleImportExceptions(e, header.getSequenceId());
}
}
为什么不让 BatchValidator.validate()
接受 2 个参数:目标和 headers。各个实现可以决定他们需要使用哪些参数。
这样您的调用循环只需将相同的参数传递给每个验证器,您不需要 instanceof
或任何转换。
如果我想在方法签名不同的地方使用不同的验证器,如何避免在这种情况下使用 instanceof
和转换?
代码
for(BatchValidator validator : validators) {
try {
if (validator instanceof BatchErrorValidator) {
((BatchErrorValidator<T>) validator).validate(targets);
} else if (validator instanceof BatchWarningValidator) {
((BatchWarningValidator<T>) validator).validate(targets, header);
}
} catch (BatchValidationException e) {
handleImportExceptions(e, header.getSequenceId());
}
}
为什么不让 BatchValidator.validate()
接受 2 个参数:目标和 headers。各个实现可以决定他们需要使用哪些参数。
这样您的调用循环只需将相同的参数传递给每个验证器,您不需要 instanceof
或任何转换。