什么时候使用 'java.util.Objects.*'?

When to use 'java.util.Objects.*'?

我正在经历 Java 7 features and they talked about java.util.Objects class。

我不明白的是两者之间的功能差异是什么

java.util.Objects.toString(foo)
vs
foo == null ? "":foo.toString()

我所能看到的只是空值检查和函数符号,而不是 OOP 样式。

我错过了什么?

调用 Objects.toString(foo) 只是让您无需记住进行空值检查,这意味着您可以直接在方法 return 值(例如 Objects.toString(getPossibleNullObject()))上使用它而无需存储它首先在变量中(或调用该方法两次)。

但是请注意,该方法实际上 returns:

the result of calling toString for a non-null argument and "null" for a null argument

所以它实际上等同于:

foo == null ? "null" : foo.toString();

如果您想要 "" 作为空值,您可以使用传递 nullDefault return 值的重载 Objects.toString(foo, "")

java.util.Objects.toString() 的主要优点是您可以轻松地在可能为 null 的 return 值上使用它,而不需要创建一个新的局部变量(或者更糟的是调用函数两次).

比较

Foo f = getFoo();
String foo = (f==null) ? "null" : f.toString();

或令人畏惧和引发错误的

String foo = (getFoo()==null) ? "null" : getFoo().toString()

到基于 Objects.toString 的版本

String foo = Objects.toString(getFoo());