繁体   English   中英

重写嵌套 if 的最简洁方法

[英]Cleanest way to rewrite nested if

我有一些这样的代码:

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 = null时,执行returnVal = instance可能会产生误导,所以这也是一些东西。

第三,如果someCondition(v)是真的,那么我设置returnVal为空,这样也并不理想,因为我设置returnVal = instance在第一线,如果null再次然后为空,我也这returnVal = null ,所以它的那种重复?

什么是重写这个最干净的方法,为什么?

反转第一个if ,并测试是否为null 然后你只需要一个 or 来测试someCondition (并且可以返回null )。 否则,您将返回原始instance 消除临时变量可以使代码更具可读性(但应在它们提高可读性时使用)。 把它放在一起,你可以写

public ClassName func(@Nullable ClassName instance) {
    if (instance == null || someCondition(instance.getV())) {
        return null;
    }
    return instance;
}

如果你想使用 Java Optional 来看看功能性,你可以试试

return Optional.ofNullable(instance)
    .filter(instanceValue -> someCondition(instanceValue.getV()))
    .orElse(null);

这正是 Elliott Frisch 的回答所说的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM