何时使用';java.util.Objects.';?
我正在浏览专题,他们谈论课堂 我不明白的是,它们之间的功能区别是什么何时使用';java.util.Objects.';?,java,oop,java-7,Java,Oop,Java 7,我正在浏览专题,他们谈论课堂 我不明白的是,它们之间的功能区别是什么 java.util.Objects.toString(foo) vs foo == null ? "":foo.toString() 我所能看到的是一个空检查和函数表示法,而不是样式 我遗漏了什么?调用只需省去对空检查的记忆,这意味着您可以直接在方法返回值(例如Objects.toString(getPossibleNullObject()))上使用它,而无需先将其存储在变量中(或调用该方法两次) 但是请注意,该方法实际上返
java.util.Objects.toString(foo)
vs
foo == null ? "":foo.toString()
我所能看到的是一个空检查和函数表示法,而不是样式
我遗漏了什么?调用只需省去对空检查的记忆,这意味着您可以直接在方法返回值(例如Objects.toString(getPossibleNullObject())
)上使用它,而无需先将其存储在变量中(或调用该方法两次)
但是请注意,该方法实际上返回:
对非null参数调用toString
,对null
参数调用null
的结果
所以它实际上相当于:
foo == null ? "null" : foo.toString();
如果要将“
用于null值,可以使用传递null default
返回值的重载,其主要优点是可以轻松地将其用于可能为null的返回值,而无需创建新的局部变量(或者更糟糕的是调用函数两次)
比较
Foo f = getFoo();
String foo = (f==null) ? "null" : f.toString();
或是卑躬屈膝、令人讨厌的人
String foo = (getFoo()==null) ? "null" : getFoo().toString()
到基于对象的.toString
版本
String foo = Objects.toString(getFoo());
为什么一定要有功能上的差异?更清晰的表示法本身不是一种好处吗?实际的问题是,既然Java 1.0已经有了
String.valueOf
,而Java 1.0也有同样的功能(Objects.toString
只是调用它),为什么要引入这种方法呢。