当我编写代码时,我经常问自己同样的问题:
我是否必须验证所有参数都不为null?因此,在每种方法中,我都会得到类似的信息:
if (arg1 == null)
{
throw FooException("...");
}
if (arg2 == null)
{
throw FooException("...");
}
如果不是,在哪种情况下更可取?
最佳做法是什么?
解决方法:
与往常一样,这取决于.
如果您要编写供其他团队/组织使用的API,则这种具有防御性的编程并带有对公共功能的先决条件检查可以真正帮助您的用户;使用外部库时,有意义的错误消息(例如“传递给foo()的参数不应为null)”比某些内部类抛出的NullPointerException更好.
不过,我认为在API之外,此类检查会使代码过于混乱.无论如何,使用调试器通常可以很容易地引发抛出的NullPointerExceptions.在支持它们的语言中,您可以考虑使用断言-它们的语法通常不太麻烦,并且可以在生产时将其关闭,以便检查不会降低性能.