在Java中防止instanceof和casting [重复]

Posted

技术标签:

【中文标题】在Java中防止instanceof和casting [重复]【英文标题】:Preventing instanceof and casting in Java [duplicate] 【发布时间】:2018-02-12 22:55:37 【问题描述】:

如果我想在方法签名不同的情况下使用不同的验证器,如何避免在这种情况下使用 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() 方法的必需签名? 【参考方案1】:

为什么不让BatchValidator.validate() 使用 2 个参数:目标和标题。各个实现可以决定他们需要使用哪些参数。

这样,您的调用循环只需将相同的参数传递给每个验证器,您不需要instanceof 或任何转换。

【讨论】:

以上是关于在Java中防止instanceof和casting [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA程序中instanceof是啥意思

在 Java 中使用 instanceof 对性能的影响

Java中instanceof和isInstance区别详解

Java中instanceof关键字的用法总结

在 Java 中使用“instanceof”[重复]

java 中 instanceof 和 isInstance区别