【发布时间】:2016-10-30 08:12:20
【问题描述】:
在为这个网站上的另一个答案编写代码时,我遇到了这个特殊性:
static void testSneaky() {
final Exception e = new Exception();
sneakyThrow(e); //no problems here
nonSneakyThrow(e); //ERRROR: Unhandled exception: java.lang.Exception
}
@SuppressWarnings("unchecked")
static <T extends Throwable> void sneakyThrow(Throwable t) throws T {
throw (T) t;
}
static <T extends Throwable> void nonSneakyThrow(T t) throws T {
throw t;
}
首先,我很困惑为什么 sneakyThrow 调用对编译器来说是可以的。当没有任何地方提到未经检查的异常类型时,它推断出T 的可能类型是什么?
其次,接受这个工作,为什么编译器会抱怨nonSneakyThrow 调用?它们看起来非常相似。
【问题讨论】:
标签: java generics java-8 type-inference