有没有办法让开发人员用户处理代码中的所有未经检查的异常,以便在处理所有未经检查的异常之前代码不会编译?我想强制用户处理异常,例如
iterator.next()
有没有办法让开发人员用户处理代码中的所有未经检查的异常,以便在处理所有未经检查的异常之前代码不会编译?我想强制用户处理异常,例如
iterator.next()
不,你不能。通常,如果您想强制用户处理未检查的异常,您可以手动捕获它们并将它们包装在已检查的异常中
例如
Integer a;
try {
a = 1;
}
catch (NullPointerException e) {
throw new Exception(e);
}
a 为 null 将抛出 NPE。然后将其包裹在一个已检查的Exception
. (这里的异常可能太通用了,所以您可能必须创建自己的检查异常类)
这种模式的问题在于,您必须到处检查可能存在未经检查的异常的地方。这些没有被声明为方法签名的一部分,因此它可能意味着通过 API 拖网。
或者你可能更脏,并且有很多 try/catch 块可以 catch Exception
。Exception 是 RuntimeException 的超类,因此它会捕获未经检查的异常。
我不确定你想做的是正确的方法。未经检查的异常通常是程序员错误,因此确实应该被捕获。它们通常是代码中的错误。(关于未经检查/检查的异常的观点存在大量争论,您可以用谷歌搜索)
不,您不能完全强制用户处理未经检查的异常,这不是未经检查的异常的含义。对于强制处理,有检查异常。但是,您可以要求用户处理程序中的所有异常。
不,你不能。AFAIK 最好的机会是使用关闭挂钩
不,你不能强迫用户这样做,你可以很好地问他......
不。
编译器将如何做到这一点?由于这些异常是未经检查的,它们没有在方法签名中声明(大部分情况下),那么它如何知道需要处理什么?