在流中投掷投掷->"未处理的异常类型Throwable"



有人知道为什么在流中抛出Throwable或Exception不能在下面的代码中编译吗?

环境:Win 10 x64,Eclipse 2020-03,openJDK v14

public void myMethod(final boolean myBoolean) throws Throwable {
if (myBoolean) {throw new Exception("Compiler accepts this OK");}
if (myBoolean) {throw new Throwable("Compiler accepts this OK");}
Stream.of("").forEach(s -> {throw new Error("");});
Stream.of("").forEach(s -> {throw new RuntimeException("");});
Stream.of("").forEach(s -> {throw new Exception("Compiler -> Unhandled exception type Exception");});
Stream.of("").forEach(s -> {throw new Throwable("Compiler -> Unhandled exception type Throwable");});
}

我已经声明该方法抛出Throwable&在Stream之外,它编译得还可以,但在内部,我似乎只能抛出Error&运行时异常。

简单的回答是ExceptionThrowable是检查异常。检查异常的规则规定,它们必须在抛出它们的方法(或lambda(中捕获,或者必须在方法(或函数接口(的throws列表中声明。

(另请参阅:"错误:未报告的异常<XXX>必须被捕获或声明为抛出"是什么意思,以及我如何修复它?了解一些背景信息。(

在你的例子中,这两件事都不实用。因此,您应该避免在该上下文中抛出已检查的异常。请改用未检查的异常;即CCD_ 4或子类。


请注意,将方法声明为throws Throwablethrows Exception是个坏主意。这有效地迫使调用者处理它(通常(不知道的1异常。如果要使用已检查的异常,请使用特定于";例外条件";你在发信号。如有必要,请声明自定义异常。

1-。。。要么通过处理它们,要么在方法签名中声明它们