我正在浏览Java 7个功能,他们谈到了java.util.Objects
课程。
我无法理解的是
之间的功能差异java.util.Objects.toString(foo)
vs
foo == null ? "":foo.toString()
我只能看到额外的是一个空检查和功能表示法而不是OOP样式。
我错过了什么?
答案 0 :(得分:8)
java.util.Objects.toString()
的主要优点是你可以在一个可能为null的返回值上轻松使用它,而不是需要创建一个新的局部变量(或者更糟糕的是调用该函数两次)。
比较
//currently the command i am using is this:
String[] cmd = new String[]{"logcat", "-f", filepath, "-v", "time"};
//i think it should be something like this
String[] cmd = new String[]{"logcat", "-f", filepath, "-v", "time", "-v" ,"tag: D/"};
或令人畏惧的错误诱导
Foo f = getFoo();
String foo = (f==null) ? "null" : f.toString();
到基于String foo = (getFoo()==null) ? "null" : getFoo().toString()
的版本
Objects.toString
答案 1 :(得分:5)
调用Objects.toString(foo)
只是不需要你记住进行空检查,这意味着你可以直接在方法返回值(例如Objects.toString(getPossibleNullObject())
)上使用它而不将其存储在变量中(或者两次调用方法)。
但请注意,该方法实际返回:
为非空参数调用
toString
而为"null"
参数调用null
的结果
所以它实际上相当于:
foo == null ? "null" : foo.toString();
如果您希望""
为空值,则可以使用传递nullDefault
返回值的重载Objects.toString(foo, "")