抛出新的RuntimeException与cast之间的区别导致RuntimeException

时间:2017-09-25 04:44:22

标签: java exception

之间有区别吗?
} catch (ExceptionType1 e) {
    throw new RuntimeException(e);
}

} catch (ExceptionType1 e) {
    throw (RuntimeException) e.getCause();
}

如果存在差异,我应该在ExceptionType1中检查什么才能确定哪一个更好?

1 个答案:

答案 0 :(得分:1)

有许多不同之处:

 throw new RuntimeException(e);

这会在新e中包含任何异常RuntimeException,并抛出此RunTimeException

另一方面:

throw (RuntimeException) e.getCause();

这会尝试将任何异常e原因强制转换为RuntimeException。主要区别是:

  • 您丢失了原始异常e的详细信息,因为您只是尝试抛出其原因(可能为空)
  • 原因可能不会从RuntimeException继承而且可能无法转换,在这种情况下会发生ClassCastException