Java Null参考最佳实践

Woo*_*ass 11 java coding-style

在java中,以下哪一种处理可能为空的引用的"接受"方式?请注意,空引用并不总是表示错误...

if (reference == null) {
    //create new reference or whatever
}
else {
    //do stuff here
}
Run Code Online (Sandbox Code Playgroud)

要么

try {
    //do stuff here
}
catch (NullPointerException e) {
    //create new reference or whatever
}
Run Code Online (Sandbox Code Playgroud)

小智 14

已经给出的答案非常好(不要使用控制流的例外;抛出和处理的例外是昂贵的).还有另一个重要的原因,特别是没有抓住NullPointerException.

考虑执行以下操作的代码块:

try {
    reference.someMethod();
    // Some other code
}
catch (NullPointerException e) {
    // 'reference' was null, right? Not so fast...
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一种处理reference...的无效的安全方法,但是如果引用是非null并且someMethod()提升了NPE呢?或者如果在try街区的其他地方有一个NPE被提升怎么办?捕获NPE是防止错误被发现和修复的可靠方法.


Pau*_*lin 12

捕获异常相对昂贵.通常最好是检测条件而不是对它做出反应.


Jig*_*shi 7

当然是这一个

if (reference == null) {
    //create new reference or whatever
}
else {
    //do stuff here
}
Run Code Online (Sandbox Code Playgroud)

我们不应该依赖于例外的决策,而这些例外根本不是为了这个目的而给出的,它们也很昂贵.


那么如果您没有做出决定并且只是验证初始化变量那么

if (reference == null) {
    //create new reference or whatever
}
//use this variable now safely  
Run Code Online (Sandbox Code Playgroud)

我看到一些自动代码生成器在accessors/getter方法中包装了这个东西.