在Java中自我检查null是否有意义

Raf*_*l T 8 java null coding-style nullpointerexception

我经常看到java SourceCode,其中null不作为方法或构造函数的值.这个的典型实现看起来像

public void someMethod(Object someObject){

    if(someObject == null) throw new NullPointerException()

    someObject.aMethodCall()

}
Run Code Online (Sandbox Code Playgroud)

我根本就认为没有任何意义,因为如果我试图在nullPointer上调用一个方法,那么无论如何NullPointerException都会抛出它.我会看到这种方法是否会抛出IllegalArgumentException或其他一些自定义异常.有人可以澄清,为什么这个检查似乎有意义(因为我经常看,我认为,这背后必须有意义),或者为什么它完全是胡说八道

nfe*_*ner 9

你发布的代码完全没有任何意义.它看起来像货物崇拜节目的强大案例.最有可能的是,有人实施了一次有用的测试来检查前置条件,而其他人则将测试调整为这样.


Dan*_*ely 6

有一个角落的情况下,这样的事情是有道理的.如果不立即使用someObject,则将错误情况短路到函数的开头可能很有用.

public void someMethod(Object someObject){

    if(someObject == null) throw new NullPointerException();

    expensiveOperationNotUsingSomeObject();

    someObject.aMethodCall();
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*age 5

不,这并没有多大意义,只是因为投掷NPE不会添加任何有用的信息.

您可以通过抛出(例如)IllegalStateException来使错误更好:

if (someObject == null) throw new IllegalStateException("someObject was null");
Run Code Online (Sandbox Code Playgroud)

但这并没有增加很多价值 - 除了具体的什么是null(这在更复杂的方法中可能有用)


duf*_*ymo 5

当然你想检查null.这是您的方法的先决条件,是与客户签订合同的一部分.如果您的方法无法接受空输入,则需要强制执行该操作.

异常的选择可能会更好.我通常会去IllegalArgumentException.

如果是困扰你的方法的简洁,我不得不说我同意.那里没有新信息.