捕获IllegalArgumentException的最佳方法是什么

Cha*_*dNC 9 java exception

什么时候才能最好地利用这种类型的例外,如果陷入这种类型的捕获,它是否正确处理?

catch(Exception e)
Run Code Online (Sandbox Code Playgroud)

还是需要明确捕获?

catch(IllegalArgumentException e)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 13

被第一个捕获 - 但是其他一些异常也会被捕获.你不应该抓到比你真正想要的更多.

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


Arn*_*sch 8

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

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

catch(IllegalArgumentException e)
Run Code Online (Sandbox Code Playgroud)


Joe*_*oey 5

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