什么时候使用 '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());
我正在经历 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 anull
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());