Java 8中异常类型推断的一个特殊特性
- 论坛
- Java 8中异常类型推断的一个特殊特性
17 浏览
Java 8中异常类型推断的一个特殊特性
在为这个网站上的另一个答案编写代码时,我遇到了这个奇特的情况:
static void testSneaky() { final Exception e = new Exception(); sneakyThrow(e); //这里没有问题 nonSneakyThrow(e); //错误:未处理的异常:java.lang.Exception } @SuppressWarnings("unchecked") staticvoid sneakyThrow(Throwable t) throws T { throw (T) t; } static void nonSneakyThrow(T t) throws T { throw t; }
首先,我对编译器为什么认为sneakyThrow
调用是正确的感到非常困惑。在任何地方都没有提到未检查异常类型,它可能为T
推断出什么类型?
其次,如果接受这一点是有效的,为什么编译器在nonSneakyThrow
调用时会抱怨?它们看起来非常相似。