簡體   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