1

有没有办法让开发人员用户处理代码中的所有未经检查的异常,以便在处理所有未经检查的异常之前代码不会编译?我想强制用户处理异常,例如

iterator.next()
4

5 回答 5

5

不,你不能。通常,如果您想强制用户处理未检查的异常,您可以手动捕获它们并将它们包装在已检查的异常中

例如

Integer a;
try {
    a = 1;
}
catch (NullPointerException e) {
     throw new Exception(e);
}

a 为 null 将抛出 NPE。然后将其包裹在一个已检查的Exception. (这里的异常可能太通用了,所以您可能必须创建自己的检查异常类)

这种模式的问题在于,您必须到处检查可能存在未经检查的异常的地方。这些没有被声明为方法签名的一部分,因此它可能意味着通过 API 拖网。

或者你可能更脏,并且有很多 try/catch 块可以 catch Exception。Exception 是 RuntimeException 的超类,因此它会捕获未经检查的异常。

我不确定你想做的是正确的方法。未经检查的异常通常是程序员错误,因此确实应该被捕获。它们通常是代码中的错误。(关于未经检查/检查的异常的观点存在大量争论,您可以用谷歌搜索)

于 2012-09-26T08:51:29.683 回答
1

不,您不能完全强制用户处理未经检查的异常,这不是未经检查的异常的含义。对于强制处理,有检查异常。但是,您可以要求用户处理程序中的所有异常。

于 2012-09-26T08:54:13.613 回答
1

不,你不能。AFAIK 最好的机会是使用关闭挂钩

于 2012-09-26T09:41:25.463 回答
0

不,你不能强迫用户这样做,你可以很好地问他......

于 2012-09-26T08:49:41.223 回答
0

不。

编译器将如何做到这一点?由于这些异常是未经检查的,它们没有在方法签名中声明(大部分情况下),那么它如何知道需要处理什么?

于 2012-09-26T08:51:10.263 回答