如何在不必运行两次的情况下检查java方法是否返回null



我的代码中多次出现这种情况

我有一个方法,例如:

private Object doSomething(){
//Do something
doSomething ? return Object : return null;
}

这只是一个例子,在我做其他事情之前,我需要在代码的主体中检查它是否返回null。例如:

if(doSomething() != null){
Object object = doSomething();

从性能的角度来看,这个方法被要求运行两次,一次是检查它是否返回null,另一次是分配新变量,只要它返回有效的对象。

有没有一种方法可以在不必进行双重运行的情况下开发这些代码。请记住,确保对象有效的检查在代码中非常重要。

只需颠倒过程即可。首先将该调用的结果分配给一个变量,然后检查该变量是否为null

Object object = doSomething();
if (object != null) {
// do whatever with object
} else {
// do something else
}

值得注意的是,多次调用doSomething的问题可能不仅仅是性能问题。如果:

  1. doSomething有副作用,例如,如果它在数据库中插入一行,在这种情况下调用两次将插入两行
  2. doSomething依赖于一些外部状态,这些状态可能在调用之间发生变化

考虑使用Optional而不是返回null(Java 8引入(。

public Optional<Object> doSomething() {
return Optional.ofNullable(someData);
}

调用时,您有一个可选引用,该引用可能包含(也可能不包含(内容。

Optional<Object> maybeSomething = doSomething();
if (maybeSomething.isPresent()) {
Object someData = maybeSomething.get();
System.out.println("SomeData = "+someData);
}

可选与lambda很好地混合,因此您可以将其重写为..

Optional<Object> maybeSomething = doSomething();
maybeSomething.ifPresent(someData ->  System.out.println("SomeData = " + someData);

或者,如果你不需要用someData做更多的工作,你甚至可以做

doSomething().ifPresent(someData -> System.out.println("SomeData = " + someData);

最新更新