我的代码中多次出现这种情况
我有一个方法,例如:
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
的问题可能不仅仅是性能问题。如果:
doSomething
有副作用,例如,如果它在数据库中插入一行,在这种情况下调用两次将插入两行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);