Luc*_*s T 58 java compare java-8
如你所知,java.util.Objects
是
此类包含用于对对象进行操作的静态实用程序方法.
其中一种方法是Objects.isNull()
.
我的理解是,Objects.isNull()
通过省略第二个,可以消除意外地将空值分配给对象的可能性=
.
但是,API Note指出:
此方法存在用作谓词,过滤器(Objects :: isNull)
会不会有任何理由/环境对我应该使用object == null
了Objects.isNull()
在if语句?
应该Objects.isNull()
仅限于Predicates吗?
Sur*_*tta 59
应该在if语句中使用Object = is null而不是Objects.isNull()?
如果你看一下源代码的IsNull
方法,
/* Returns true if the provided reference is null otherwise returns false.*/
public static boolean isNull(Object obj) {
return obj == null;
}
Run Code Online (Sandbox Code Playgroud)
这是相同的.没有区别.所以你可以安全地使用它.
小智 44
Objects.isNull旨在用于Java 8 lambda过滤.
写作更简单,更清晰
.stream().filter(Objects::isNull)
Run Code Online (Sandbox Code Playgroud)
而不是写
.stream().filter(x -> x == null).
Run Code Online (Sandbox Code Playgroud)
然而,在if中任何一个都可以工作,使用== null可能更容易阅读,但最终它将归结为样式首选项.
Men*_*ena 10
看看来源:
public static boolean isNull(Object obj) {
return obj == null;
}
Run Code Online (Sandbox Code Playgroud)
要检查null
值,您可以使用:
Objects.isNull(myObject)
null == myObject // avoids assigning by typo
myObject == null // risk of typo
这一事实Objects.isNull
是为Predicate
s不阻止你使用它上面的.
是否有任何原因/情况我应该在if 语句中使用 object == null 而不是 Objects.isNull() ?
是的,原因之一是保持代码简单。在if 语句中 object == null
是明确且众所周知的。例如,如果有错字,它不会导致任何不当行为。
我的理解是 Objects.isNull() 将通过省略第二个 = 来消除意外将空值分配给对象的机会。
如果省略了if (object = null) {}
with ,则不会编译,或者在object 的情况下会生成警告!实际上没有理由在if 语句中使用over 。这是并排的两个变体: =
Boolean
Objects.isNull(object)
object == null
if (object == null) {
}
if (Objects.isNull(object)) {
}
Run Code Online (Sandbox Code Playgroud)
Objects.isNull() 应该仅限于谓词吗?
可以说是的,它仅限于谓词,尽管在任何Objects.isNull()
地方使用都没有技术障碍。
从public static boolean isNull(Object obj)
方法的javadoc:
@apiNote此方法存在用作 java.util.function.Predicate, filter(Objects::isNull)
因此,如果您将该方法用作不是谓词,则与简单的object == null
.
这是一个比较以下好处的片段 Objects.isNull(object)
List<String> list = Arrays.asList("a", "b", null, "c", null);
// As ready-made predicate
long countNullsWithPredicate = list.stream().filter(Objects::isNull).count();
// Lambda
long countNullsWithLambda = list.stream().filter(object -> object == null).count();
// Reimplement the Objects::isNull predicate
long countNullsWithAnonymous = list.stream().filter(new Predicate<Object>() {
@Override
public boolean test(Object obj) {
return obj == null;
}
}).count();
Run Code Online (Sandbox Code Playgroud)
小智 6
从语义上讲,没有区别,但为了可读性,我更喜欢以下内容whatever == null
:
import static java.util.Objects.isNull;
// Other stuff...
if(isNull(whatever)) {
}
Run Code Online (Sandbox Code Playgroud)