为验证用户输入,我不确定哪两种选择更好
isNull( Object input )
notNull( Object input )
apache的公共场所lang图书馆选择#2,但我对双重否定感到不舒服。你怎么说?
答案 0 :(得分:4)
对我而言,双重否定总是一件坏事。 我会说坚持isNull。检查无效然后在阅读时有意义。 相反的是
if (! isNull(o) )
// ...
读出“if not is null”。当然,它听起来迟钝大声读出,但它比使用选项#1检查无效更有意义。
if (! isNotNull(o))
// ...
这句话让你倒带并说“嘿,等一下......如果不是......”。
但是如果标准已经存在方法名称中的否定,请坚持下去。标准是好事,不应因为某人“不舒服”而被打破。
答案 1 :(得分:1)
我对那些比他们替换的代码更长的函数感到不舒服。
我会使用x == null或x!= null。我同意双重否定也不清楚。
一个谜题,什么时候(s!= s)是真的?混淆行为的一个很好的例子。 ;)
答案 2 :(得分:0)
老实说,我认为这并没有多大区别。
如果您正在设计自己的API,请按照您最熟悉的方式实施它。事实上,没有强有力的理由不实施isNull
和notNull
,如果这让你感到更快乐。
但我认为放弃使用某些第三方库完全的计划是愚蠢的,因为你对“双重否定”感到“不舒服”。他们真的不是那么令人困惑。
答案 3 :(得分:0)
这里的答案取决于许多因素,其中一些是:
如果您想要更加深思熟虑的答案,请告诉我们更多细节。与此同时,我的最佳建议是提高代码的可读性:您希望尽可能多地为未来的维护者提供帮助。
答案 4 :(得分:0)
我对这个问题感到有些困惑。如果有问题的方法只是返回一个布尔值,具体取决于参数是null
,那么== null
或!= null
要好得多。
但是,对Apache Commons Lang的引用似乎表明这是有效性检查,应该抛出一个适当的异常,引用是null
。在这种情况下,您无法轻松反转输出。
FWIW,看起来好像JDK7会引入notNull
方法,正如在适当的邮件列表中所讨论的那样:
public static <T> T notNull(T obj)
用作:
import static java.util.Object.notNull;
public final MyClass {
private final Thing thing;
public MyClass(Thing thing) {
this.thing = notNull(thing);
}
...