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

Java异常显式转换与隐式转换,java,exception,runtimeexception,Java,Exception,Runtimeexception,遇到以下代码:- public <T> T call(final Callable<T> callable) { try { return callable.call(); } catch (Exception exception) { if (exception instanceof RuntimeException) { throw (RuntimeException) exception;

遇到以下代码:-

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
         }    
    }
}
public T调用(最终可调用){
试一试{
返回callable.call();
}捕获(异常){
if(运行时异常的异常实例){
抛出(RuntimeException)异常;//第6行
}否则{
抛出新的RuntimeException(异常);//第8行
}    
}
}
  • 在第6行执行
    (运行时异常)异常
    需要什么
  • 第6行抛出的异常与第8行抛出的异常有什么区别。他们不是在做同样的事情吗

  • 该代码用于将选中的异常转换为未选中的异常。在Java中,必须使用
    throws
    关键字在方法上声明选中的异常,而不需要在方法上声明未选中的异常<代码>异常是所有异常的基类,
    运行时异常
    (是
    异常
    的子类)是所有未检查异常的基类


    第6行的代码是为了让编译器满意。由于
    Exception
    是一个选中的异常,通过将其强制转换为
    RuntimeException
    ,编译器不会使用
    抛出的
    强制在方法上声明异常。第8行将已检查的异常包装为未检查的异常。

    (您最好将代码编写为
    }catch(RuntimeException exc){throw exc;}catch(exception exc){throw new RuntimeException(exc);}