Java 异常显式转换与隐式转换

Java exception explicit casting vs implicit casting

遇到这段代码:-

public <T> T call(final Callable<T> callable) {
    try {
         return callable.call();
    } catch (Exception exception) {
         if (exception instanceof RuntimeException) {
             throw (RuntimeException) exception; // Line 6
         } else {
             throw new RuntimeException(exception); // Line 8
         }    
    }
}
  1. 第 6 行 (RuntimeException) exception 需要什么?
  2. 第 6 行抛出的异常与第 8 行抛出的异常有什么区别。他们不是在做同样的事情吗?

那里的代码将已检查的异常转换为未检查的异常。在Java中,checked exceptions必须在方法上用throws关键字声明,而unchecked exceptions不需要在方法上声明。 Exception 是所有异常的基础 class,而 RuntimeException(它是 Exception 的子class)是所有未检查的基础 class例外。

第 6 行的代码是为了让编译器高兴。由于 Exception 是已检查的异常,通过将其强制转换为 RuntimeException,编译器不会强制在具有 throws 的方法上声明异常。第8行将checked exception包装成unchecked exception。