【问题标题】:Pass classname to method将类名传递给方法
【发布时间】:2014-01-09 21:22:14
【问题描述】:

我的程序倾向于使用大量包装异常(例如,SwingWorker 将其所有异常包装在 ExecutionException 中)。因此,我正在尝试编写一种方法,该方法允许我检查异常或其任何原因是否是 instanceof 异常类型,但我不知道如何(如果可能的话)传递一个类名作为方法的参数。

到目前为止,我有这个:

public static boolean errorOrCausesInstanceOfClass(Throwable e, Class c) {
    return e != null && (e.getClass().equals(c) || (e.getCause() != null && errorOrCausesInstanceOfClass(e.getCause(), c)));
}

但这只有在e.getClass() 完全等于c.getClass() 时才有效。但我也想检查一下是否使用instanceof 来捕获子类。

有没有办法做到这一点?

【问题讨论】:

  • Class 是原始类型,应该在您的方法上参数化,例如 (Throwable e, Class> c)

标签: java instanceof


【解决方案1】:

【讨论】:

    【解决方案2】:

    Class.isAssignableFrom()

    【讨论】:

      【解决方案3】:

      见方便方法Class.isInstance()

          if( ... c.isInstance(e) ...
      

      【讨论】:

      • 比起Class.isAssignableFrom(),我更喜欢这个解决方案
      • @MikeB,有什么特别的原因吗?即使在阅读了这个问题 (stackoverflow.com/questions/3949260/…) 之后,我仍然无法理解为什么一个比另一个更可取
      • @ryvantage,这主要是个人喜好。我知道的唯一真正优势是您不必担心 NullPointerException。
      • @MikeB,我想那你有错误的偏好。因为使用isAssignableFrom,您必须调用参数的getClass() 方法,如果它为null,则会抛出NPE。 isInstance 是不会抛出 NPE 的方法。
      • @ryvantage 是的,我说我更喜欢这个解决方案(这个评论在下面的答案中),这正是你指出的原因。
      猜你喜欢
      • 2011-01-01
      • 2012-12-13
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多