我正在阅读Java 7的功能,他们谈到了java.util.Objects课程.
我无法理解的是它之间的功能差异是什么
java.util.Objects.toString(foo)
vs
foo == null ? "":foo.toString()
Run Code Online (Sandbox Code Playgroud)
我只能看到额外的是一个空检查和功能表示法而不是OOP样式.
我错过了什么?
主要的优点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)
调用Objects.toString(foo)只是不需要你记住进行空检查,这意味着你可以直接在方法返回值(例如Objects.toString(getPossibleNullObject()))上使用它而不将其存储在变量中(或者调用方法两次).
但请注意,该方法实际返回:
调用的结果
toString对于非空参数,"null"一个null参数
所以它实际上相当于:
foo == null ? "null" : foo.toString();
Run Code Online (Sandbox Code Playgroud)
如果你想要""一个空值,你可以使用传递nullDefault返回值的重载Objects.toString(foo, "")