我有一些类似这样的代码:
public ClassName func(@Nullable ClassName instance){
ClassName returnVal = instance;
if(instance != null){
V1 v = instance.getV();
if(someCondition(v)){
returnVal = null;
}
}
return returnVal;
}
我正试图找到一种写得很好的方法,嵌套的if
并不是那么好。
第二,如果instance
为空,那么当我的意思是returnVal = instance
时,做returnVal = null
可能会产生误导。
第三,如果someCondition(v)
为真,那么我将returnVal
设置为null,因此也不理想,因为我在第一行设置了returnVal = instance
,如果{{1 }}然后为null,我在null
中也将其设为null,因此它是重复的吗?
最干净的重写方式是什么?为什么?
答案 0 :(得分:4)
反转第一个if
,然后测试null
。然后,您只需要一个或即可测试 someCondition
(并且可以返回null
)。否则,您将返回原始的instance
。消除临时变量可导致代码更具可读性(但应在提高可读性时使用)。放到这里,你可以写
public ClassName func(@Nullable ClassName instance) {
if (instance == null || someCondition(instance.getV())) {
return null;
}
return instance;
}
答案 1 :(得分:0)
如果您想使用Java Optional来查看功能,可以尝试
return Optional.ofNullable(instance)
.filter(instanceValue -> someCondition(instanceValue.getV()))
.orElse(null);
这正是Elliott Frisch的回答。