请考虑以下代码:
public class Main {
public static void main(String[] args)
// throws Exception // line 1
{
Optional empty1 = Optional.empty(); // line 2
Optional<Object> empty2 = Optional.empty(); // line 3
Optional.empty().orElseThrow(() -> new Exception("Empty optional")); // line 4
empty1.orElseThrow(() -> new Exception("Empty optional")); // line 5
empty2.orElseThrow(() -> new Exception("Empty optional")); // line 6
}
}
-
当第1行被注释时,第4、5、6行都报告编译时错误:
- 4号线和6号线:Unhandled exception: java.lang.Exception
- 第5行:Unhandled exception: java.lang.Throwable
这让我觉得,像第6行一样,第4行使用类型参数
<Object>
来调用,但是抛出的确切异常有什么不同呢?
-
如果未注释第1行,则只有第5行报告编译时错误:Unhandled exception: java.lang.Throwable.把1号线改成throws Throwable号线就可以解决了.为什么抛出Exception不足以让第5行解决编译时错误?