我使用x!=null以避免NullPointerException。还有其他选择吗?

if (x != null) {
    // ...
}

当前回答

Java8在Java.util包中引入了一个新的类Optional。它用于表示值是否存在。这种新构造的主要优点是不再有太多的空检查和NullPointerException。它避免了任何运行时NullPointerExceptions,并支持我们开发干净整洁的Java API或应用程序。与集合和数组一样,它也是一个最多只能容纳一个值的容器。

下面是一些有用的链接,您可以关注

https://www.mkyong.com/java8/java-8-optional-in-depth/

https://dzone.com/articles/java-8-optional-avoid-null-and

其他回答

你有一个选择

在方法上使用checker框架的@RequiresNonNull。对于ex,如果使用null参数调用一个注释为null的方法,就会得到这个结果。它将在编译期间失败,甚至在代码运行之前!因为在运行时它将是NullPointerException@RequiresNonNull(值={“#1”})静态空隙检查(布尔x){如果(x)System.out.println(“true”);else System.out.println(“false”);}公共静态void main(String[]参数){检查(空);}

得到

[ERROR] found   : null
[ERROR] required: @Initialized @NonNull Boolean
[ERROR] -> [Help 1]

还有其他方法,如Use Java 8‘s Optional、Guava Annotations、Null Object pattern等。只要您达到避免的目标,就无所谓了=无效的

有时,您可以使用对其参数进行操作的方法来定义对称操作:

a.f(b); <-> b.f(a);

如果你知道b永远不可能为空,你可以交换它。它对equals最有用:而不是foo.equals(“bar”);最好使用“bar”。equals(foo);。

无论您在何处传递数组或向量,请将它们初始化为空值,而不是空值。-这样可以避免大量检查null,一切都很好:)

public class NonNullThing {

   Vector vectorField = new Vector();

   int[] arrayField = new int[0];

   public NonNullThing() {

      // etc

   }

}

对象.isNull(null)如果您使用的是Java8,则可以尝试此代码。

如果您不使用Java8,请尝试使用以下代码

Object ob=null;
if(ob==null){ **do something}

对于实用程序类,可以检查参数是否为空。

在所有其他情况下,您可能不必这样做。尽可能使用封装,从而减少您想检查null的地方。