我正在创建一个通用类,它接受一个愿意处理的异常列表作为参数。
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。
知道如何实现它吗?
答案 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)。