最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中減少if-else的幾種方式

 更新時(shí)間:2024年01月24日 16:03:57   作者:Java斌  
if判斷語(yǔ)句是很多編程語(yǔ)言的重要組成部分,但是,若我們最終編寫(xiě)了大量嵌套的if語(yǔ)句,這將使得我們的代碼更加復(fù)雜和難以維護(hù),本文主要介紹了Java中減少if-else的幾種方式,具有一定的參考價(jià)值,感興趣的可以了解一下

有時(shí)候,代碼中充斥著大量的if-else語(yǔ)句并不是讓你的同事們完全理解的正確方式。

所以,無(wú)論你是初學(xué)者還是已經(jīng)很擅長(zhǎng)你的工作,都應(yīng)該讓你的代碼更加復(fù)雜和可讀。

你需要嘗試的第一件事是在你的代碼中去除if-else語(yǔ)句。以下是一些建議。

1: 立即返回

假設(shè)有以下的代碼:

public boolean isValid(String condition) {
  boolean result;
  if (condition != null){
      if (condition.equals("hi") {
        result = true;
      } else {
         result = false;
      }
  } else {
    result= false;
  }
  return result;
}

這種代碼通常用于提前返回,刪除了不必要的else。

public boolean isValid(String condition) {
  if (condition == null) {
    return false;
  }

  if (condition.equals("hi") {
    return true
  }

  return false;
}

這種方法通常只適用于簡(jiǎn)單的結(jié)構(gòu),我們可以提前返回來(lái)消除一些不必要的if-else語(yǔ)句。

2: 枚舉

比如以下代碼:

public String getLabel(int status) {
    String label;
    if (1 == status) {
        label = "Padding";
    } else if (2 == status) {
        label = "Paid";
    } else if (3 == status) {
        label = "Success";
    } else if (4 == status) {
        label = "Failed";
    }
    return label;
}

也許你可以說(shuō),沒(méi)有人寫(xiě)這樣的代碼。但實(shí)際上,這種寫(xiě)法是相當(dāng)常見(jiàn)的。每個(gè)公司都有這樣的代碼

這種代碼用枚舉就能解決:

@Getter
@AllArgsConstructor
public enum StatusLabelEnum {
    Padding(1, "Padding"),
    Paid(2, "Paid"),
    Success(3, "Success"),
    Failed(4, "Failed"),
    ;

    private int status;
    private String label;

    public static String getLabelByStatus(int status) {
        for (StatusLabelEnum labelEnum : StatusLabelEnum.values()) {
            if (labelEnum.getStatus() == status) {
                return labelEnum.getLabel();
            }
        }
        return "Unknown";
    }
}

通過(guò)這種枚舉,上述代碼可以直接優(yōu)化為一行代碼:

public String getLabel(int status) {
  return StatusLabelEnum.getLabelByStatus(status);
}

當(dāng)然正常的項(xiàng)目不是這么簡(jiǎn)單的k-v鍵值對(duì)的,還有更復(fù)雜的邏輯,如果返回值是固定的,枚舉也是一個(gè)簡(jiǎn)單的解決方案。

3: Optional 來(lái)解決if判斷

我相信你們肯定有項(xiàng)目,在這些項(xiàng)目中有一個(gè)非空的判斷,如果為空,則拋出異常或返回值。:

public int getOrderStatus(UUID id) {
  Order order = getOrderById(id);
  if (order == null) {
      return 1;
  } else {
      return order.getOrderStatus();
  }
}

我們可以使用Optional來(lái)非常優(yōu)雅地解決它:

public int getOrderStatus(UUID id) {
  Order order = getOrderById(id);
  return Optional.ofNullable(order).map(Order::getOrderStatus).orElse(1);
}

4: 數(shù)據(jù)表驅(qū)動(dòng)

表驅(qū)動(dòng)方法是一種允許您在不使用過(guò)多的if-else語(yǔ)句的情況下,在表格中查找信息的方法。

如有以下代碼:

if ("code1".equals(action)) {
    doAction1();
} else if ("code2".equals(action)) {
    doAction2();
} else if ("code3".equals(action)) {
    doAction3();
} else if ("code4".equals(action)) {
    doAction4();
} else if ("code5".equals(action)) {
    doAction5();
}

優(yōu)化代碼:

//Definition
Map<String, Function<?> action> actionMap = new HashMap<>();
action.put("code1",() -> {doAction1()});
action.put("code2",() -> {doAction2()});
action.put("code3",() -> {doAction3()});
action.put("code4",() -> {doAction4()});
action.put("code5",() -> {doAction5()});

//use case
actionMap.get(action).apply();

這并不是一種很好的實(shí)現(xiàn)表驅(qū)動(dòng)方法的方式,因?yàn)榇a可能會(huì)顯得非常臃腫

多實(shí)現(xiàn)類的方法優(yōu)化:

//1. Define interface
public interface ActionService {
    void doAction();
}

//2. Define implementations
public class ActionService1 implements ActionService{
    public void doAction() {
        //do something
    }
}

//3. add to table
Map<String, ActionService> actionMap = new HashMap<>();
action.put("code1",new ActionService1());
action.put("code2",new ActionService2());
action.put("code3",new ActionService3());
action.put("code4",new ActionService4());
action.put("code5",new ActionService5());

//4. use it
actionMap.get(action).doAction();

到此這篇關(guān)于Java中減少if-else的幾種方式的文章就介紹到這了,更多相關(guān)Java 減少if-else內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 詳解Java并發(fā)之Condition

    詳解Java并發(fā)之Condition

    這篇文章主要介紹了Java并發(fā)編程之Condition,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java中數(shù)據(jù)庫(kù)連接池HikariCP和Druid的技術(shù)對(duì)比與性能分析

    Java中數(shù)據(jù)庫(kù)連接池HikariCP和Druid的技術(shù)對(duì)比與性能分析

    在現(xiàn)代Java應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)庫(kù)連接池是提升應(yīng)用性能的關(guān)鍵組件之一,本文將深入對(duì)比兩個(gè)主流的Java數(shù)據(jù)庫(kù)連接池,希望對(duì)大家有一定的幫助
    2025-08-08
  • 關(guān)于Spring MVC在Controller層中注入request的坑詳解

    關(guān)于Spring MVC在Controller層中注入request的坑詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC在Controller層中注入request的坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • apache ant進(jìn)行zip解壓縮操作示例分享

    apache ant進(jìn)行zip解壓縮操作示例分享

    本文主要介紹了使用apache ant進(jìn)行zip解壓縮操作的方法,可以解決中文編碼和首層父類無(wú)法創(chuàng)建問(wèn)題,需要的朋友可以參考下
    2014-02-02
  • MyBatis使用自定義TypeHandler轉(zhuǎn)換類型的實(shí)現(xiàn)方法

    MyBatis使用自定義TypeHandler轉(zhuǎn)換類型的實(shí)現(xiàn)方法

    這篇文章主要介紹了MyBatis使用自定義TypeHandler轉(zhuǎn)換類型的實(shí)現(xiàn)方法,本文介紹使用TypeHandler 實(shí)現(xiàn)日期類型的轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Java大文件上傳詳解及實(shí)例代碼

    Java大文件上傳詳解及實(shí)例代碼

    這篇文章主要介紹了Java大文件上傳詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • JAVA項(xiàng)目常用異常處理匯總

    JAVA項(xiàng)目常用異常處理匯總

    這篇文章主要介紹了JAVA項(xiàng)目常用異常處理匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot使用JavaMailSender實(shí)現(xiàn)發(fā)送郵件

    SpringBoot使用JavaMailSender實(shí)現(xiàn)發(fā)送郵件

    JavaMailSender是Spring Framework中的一個(gè)接口,用于發(fā)送電子郵件,本文主要為大家詳細(xì)介紹了SpringBoot如何使用JavaMailSender實(shí)現(xiàn)發(fā)送郵件,需要的可以參考下
    2023-12-12
  • SpringCloud Alibaba微服務(wù)啟動(dòng)報(bào)錯(cuò)原因及解決方案

    SpringCloud Alibaba微服務(wù)啟動(dòng)報(bào)錯(cuò)原因及解決方案

    這篇文章給大家介紹了SpringCloud Alibaba微服務(wù)啟動(dòng)報(bào)錯(cuò)原因及解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-05-05
  • java實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器

    java實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評(píng)論

宿松县| 德安县| 扎赉特旗| 阜新市| 德州市| 海南省| 即墨市| 岑溪市| 古交市| 古丈县| 佛学| 乌拉特前旗| 通化市| 榆中县| 含山县| 房产| 凌海市| 诸城市| 恩施市| 怀安县| 新乐市| 嘉善县| 英德市| 清水河县| 温宿县| 铁力市| 从江县| 都江堰市| 陈巴尔虎旗| 彭泽县| 田阳县| 北票市| 广水市| 霍山县| 海安县| 郁南县| 温宿县| 犍为县| 兴安盟| 泌阳县| 中宁县|