何时使用'java.util.Objects.*'?

Aje*_*nga 7 java oop java-7

我正在阅读Java 7的功能,他们谈到了java.util.Objects课程.

我无法理解的是它之间的功能差异是什么

java.util.Objects.toString(foo)
vs
foo == null ? "":foo.toString()
Run Code Online (Sandbox Code Playgroud)

我只能看到额外的是一个空检查和功能表示法而不是OOP样式.

我错过了什么?

Mic*_*son 8

主要的优点java.util.Objects.toString()是你可以很容易地在一个可能为null的返回值上使用它,而不是需要创建一个新的局部变量(或者更糟糕的是调用该函数两次).

相比

Foo f = getFoo();
String foo = (f==null) ? "null" : f.toString();
Run Code Online (Sandbox Code Playgroud)

或者是那种令人畏缩的错误诱惑

String foo = (getFoo()==null) ? "null" : getFoo().toString()
Run Code Online (Sandbox Code Playgroud)

Objects.toString基于版本

String foo = Objects.toString(getFoo());
Run Code Online (Sandbox Code Playgroud)


And*_*own 5

调用Objects.toString(foo)只是不需要你记住进行空检查,这意味着你可以直接在方法返回值(例如Objects.toString(getPossibleNullObject()))上使用它而不将其存储在变量中(或者调用方法两次).

但请注意,该方法实际返回:

调用的结果toString对于非空参数,"null"一个null参数

所以它实际上相当于:

foo == null ? "null" : foo.toString();
Run Code Online (Sandbox Code Playgroud)

如果你想要""一个空值,你可以使用传递nullDefault返回值的重载Objects.toString(foo, "")