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
}
}
}
- 第 6 行
(RuntimeException) exception
需要什么?
- 第 6 行抛出的异常与第 8 行抛出的异常有什么区别。他们不是在做同样的事情吗?
那里的代码将已检查的异常转换为未检查的异常。在Java中,checked exceptions必须在方法上用throws
关键字声明,而unchecked exceptions不需要在方法上声明。 Exception
是所有异常的基础 class,而 RuntimeException
(它是 Exception
的子class)是所有未检查的基础 class例外。
第 6 行的代码是为了让编译器高兴。由于 Exception
是已检查的异常,通过将其强制转换为 RuntimeException
,编译器不会强制在具有 throws
的方法上声明异常。第8行将checked exception包装成unchecked 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
}
}
}
- 第 6 行
(RuntimeException) exception
需要什么? - 第 6 行抛出的异常与第 8 行抛出的异常有什么区别。他们不是在做同样的事情吗?
那里的代码将已检查的异常转换为未检查的异常。在Java中,checked exceptions必须在方法上用throws
关键字声明,而unchecked exceptions不需要在方法上声明。 Exception
是所有异常的基础 class,而 RuntimeException
(它是 Exception
的子class)是所有未检查的基础 class例外。
第 6 行的代码是为了让编译器高兴。由于 Exception
是已检查的异常,通过将其强制转换为 RuntimeException
,编译器不会强制在具有 throws
的方法上声明异常。第8行将checked exception包装成unchecked exception。