【发布时间】:2015-06-17 09:12:53
【问题描述】:
我想知道为什么下面的代码有效:
public static void throwUnchecked(Exception e) {
TestGenericExceptionCast.<RuntimeException> doThrowUnchecked(e);
}
@SuppressWarnings("unchecked")
private static <T extends Exception> void doThrowUnchecked(Exception toThrow) throws T {
throw (T) toThrow;
}
public static void main(String[] args) {
throwUnchecked(new Exception());
}
为什么可以通过泛型将异常转换为 RuntimeException?
知道了:
根本不会发生强制转换,因为从来没有对象被分配给 T 类型的东西。
编译器被欺骗了,再也看不到它是一个检查异常。
【问题讨论】: