什么';“这是避免大量”的最好方法;如果(obj!=null)";在Java代码中?

什么';“这是避免大量”的最好方法;如果(obj!=null)";在Java代码中?,java,nullpointerexception,Java,Nullpointerexception,可能重复: 分享您的想法。对于返回此类对象的方法,第一个答案是始终返回空列表、集合和数组,而不是null。Joshua Bloch的Java第二版第43项 在我看来,空支票是邪恶的。它们表明,没有合同确定obj是否为null。一个好的替代方法是,编写代码时保证obj永远不会null。例如:如果一个getter必须获取一个非空的obj,但不能,那么它必须自己抛出一个异常。请查看。基本思想是,您可以使用一个特殊版本的类来代替null 此特殊版本将字段设置为在代码中有意义的默认值。这意味着你永远不会

可能重复:


分享您的想法。

对于返回此类对象的方法,第一个答案是始终返回空列表、集合和数组,而不是null。Joshua Bloch的Java第二版第43项


在我看来,空支票是邪恶的。它们表明,没有合同确定
obj
是否为
null
。一个好的替代方法是,编写代码时保证
obj
永远不会
null
。例如:如果一个getter必须获取一个非空的obj,但不能,那么它必须自己抛出一个异常。

请查看。基本思想是,您可以使用一个特殊版本的类来代替null


此特殊版本将字段设置为在代码中有意义的默认值。这意味着你永远不会有空引用,你只是有一个类,它在使用时不会做很多事情或返回默认值。

Dupe:虽然非常有效,但确实会损害一些可读性。完全同意,可读性受到严重损害。但这是一个您应该熟悉的习惯用法,并且不要害怕在某些情况下使用。它还隐藏了可能发生的空指针异常bad@OliverWatkins为什么?通过使用CONST_VALUE对象的equals(Object)方法,它将永远不会抛出NPE(假设CONST_值是一个已经初始化的常量),是的,如果它们是常量,应该可以。但是它读起来很糟糕:obj.equals(CONST)读起来比CONST.equals(obj)好得多@Mark Yep,我在你写评论的时候更新了我的答案;-)链接不再处于活动状态,只是指向Java technetworksite@ManuelSelva破碎的Link@GC_修好了,谢谢。空集合几乎是这种情况的一个特例——您不需要为它们编写类。但是,传递非null且行为安全的内容的模式是相同的。虽然在某些情况下很好,但我发现它在现实世界中的使用是相当有限的。@Robin,是的,它有一些限制,但它确实比获取NullReferenceExceptions强!!另一方面,对于许多合同,
null
是一个可接受的值。所以你不想取消对null的检查,只想取消对所有内容的检查。@matt:的确如此。但是,null检查不能在使用对象之前进行,而是在获取对象之后立即进行。如果空检查在代码中无处不在,则表明代码编写得很糟糕。
if (CONST_VALUE.equals(obj)) { ... }