重新抛出RuntimeException的子类

时间:2011-10-12 14:53:27

标签: java exception-handling

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

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,那么我希望throw为NullPointerException,而不是现在的RuntimeException。

知道如何实现它吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

它已经有效了:

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)

答案 2 :(得分:0)

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