捕获IllegalArgumentException的最佳方法是什么

什么时候才能最好地利用这种类型的例外,如果陷入这样的陷阱,它是否能正常运行?

catch(Exception e) 

还是需要明确捕获?

 catch(IllegalArgumentException e) 

被第一个捕获 – 但是其他一些exception也会被捕获。 你不应该抓住比你真正想要的更多。

第二个是更好的,如果你真的必须抓住它…但通常这表明调用代码中的错误。 有时这是另一种方法的情况,而不是validation参数等。在理想的世界中,任何时候IllegalArgumentException都应该有一种方法让调用者在传入之前validation该值,或调用一个版本将以非特殊方式失败(例如.NET中的TryParse模式,在没有out参数的情况下,Java中更难以out )。 情况并非总是如此,但每当您收到IllegalArgumentException时,都需要检查是否可以通过在调用方法之前检查值避免它。

您不应该处理IllegalArgumentException。 它的目的是通知开发人员,他已经使用错误的参数调用了一个方法。 解决方法是,使用其他参数调用该方法。

如果你必须抓住它,你应该使用

 catch(IllegalArgumentException e) 

你应该远离catch (Exception)因为这样你就可以捕获每一个可能的exception。 如果你真的只期望 IllegalArgumentException并处理这种情况,你就不应该扩大那个范围; 那么,最好为其他类型的exception添加更多的catch块。

这实际上取决于手头的情况,要么本身是正确的。 在不缩小问题范围的情况下,给出“最佳使用”示例有点困难。