会不会有任何理由/情形为此我应该在if语句使用对象== NULL超过Objects.isNull()?
是的,一个原因是保持代码简单。在之内如果陈述object == null
是清楚和众所周知的。如果存在拼写错误,它不会导致任何不当行为。
我的理解是Objects.isNull()会通过省略second =来消除意外地将null值分配给对象的机会。
如果有if (object = null) {}
与省略=
它不会编译或将在Boolean
对象的情况下产生的警告!其实没有理由使用Objects.isNull(object)
而不是object == null
如果声明。这里有两个变种并排:
if (object == null) {
}
if (Objects.isNull(object)) {
}
是否应Objects.isNull()仅限于专门的谓词?
可以说是的,它仅限于Predicates,尽管在任何地方都没有技术障碍使用Objects.isNull()
。
从public static boolean isNull(Object obj)
方法的Javadoc:
@apiNoteThis方法存在被用作java.util.function.Predicate,过滤器(对象::参考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();
there's Objects.requireNonNull(T obj); btw –
如果你所担心的只是偶然的分配,你可以简单地使用'if(null == variable)'... – Holger
@Holder,你有什么意外的担心吗?这是Java。你会得到一个类型错误。 –