最干净的方法来重写嵌套

时间:2020-01-20 04:27:28

标签: java

我有一些类似这样的代码:

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,因此它是重复的吗?

最干净的重写方式是什么?为什么?

2 个答案:

答案 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的回答。

相关问题