在 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 或任何转换。