【问题标题】:rethrowing subclass of RuntimeException重新抛出 RuntimeException 的子类
【发布时间】:2011-10-12 14:53:26
【问题描述】:

我正在创建一个通用类,它接受它愿意处理的异常列表作为参数。

public class MyClass {
  public MyClass (List<Class<? extends RuntimeException>> exceptions) ...
  public execute() {
    try {
      justObj.call()
    } catch(RuntimeException e) {
      if exceptions.contains(e.getClass()) {...}
      else {throw e;}
    }

我希望抛出的异常是我捕获的原始异常,例如如果是 NullPointerException,那么我希望抛出的是 NullPointerException 而不是现在的 RuntimeException。

知道如何实现吗?

【问题讨论】:

  • 你试过了吗?如果没有,为什么不呢?
  • 谢谢。我的代码中有一个错误,它改变了类型。

标签: java exception-handling


【解决方案1】:

当您捕获 RuntimeException(或任何子类)时,它不会更改对象/异常的类型。如果它是 NullPointerException,当你再次抛出它时它仍然是这种类型的对象(就像你在代码中所做的那样)

【讨论】:

    【解决方案2】:

    它已经工作了:

    public static void main(String[] args) {
        try {
                ((ArrayList) null).get(0);
        } catch (RuntimeException e) {
            throw e;
        }
    }
    

    抛出:

    Exception in thread "main" java.lang.NullPointerException
        at Test.main(Test.java:96)
    

    【讨论】:

      【解决方案3】:

      它将是 - RuntimeException 只是对原始对象的引用,它将是最初抛出 RuntimeException 的任何子类(例如 NullPointerException)。

      【讨论】:

        猜你喜欢
        • 2021-10-08
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 2015-01-25
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2018-07-10
        相关资源
        最近更新 更多