【发布时间】:2021-03-19 17:48:40
【问题描述】:
如果需要在每次检查后执行某些操作或如何最好地处理这些检查,如何避免多次空检查? java 8+
public void method(Object obj){
if (Objects.nonNull(obj.getA())) {
do something;
}
if (Objects.nonNull(obj.getB())) {
do something;
}
if (Objects.nonNull(obj.getC())) {
do something;
}
do something;
}
【问题讨论】:
-
Java8 中除了空检查之外别无选择。你必须明确地做到这一点。无论如何
obj.getA() != null似乎比你上面使用的更简单和简洁。 -
我看不出它的惯用语有什么问题,除了它不能编译。
-
好吧,您可以使用某种形式的循环来检查元素,并使用 lambda 来处理那些为空的元素。这是否有意义取决于您的要求。您可以尝试的一件事(没有自定义方法)是这样的(概念上):
Arrays.asList(obj.getA(), obj.getB(), ...).stream().filter(e -> e == null).foreach(e -> /*do something*/). -
@Thomas 请不要... :) 流不是答案。那里没有任何功能原因创建了许多无用的对象。如果是的话,你应该使用 Objects::nonNull 作为谓词,而不是创建一个新的 lambda。
-
@Thomas 而不是
Arrays.asList(obj.getA(), obj.getB(), ...).stream()你可以写Stream.of(obj.getA(), obj.getB(), ...)
标签: java if-statement java-8 null notnull