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

Java中避免過(guò)多if-else的幾種方法

 更新時(shí)間:2020年11月10日 14:47:10   作者:tom3mao  
這篇文章主要介紹了Java中避免過(guò)多if-else的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

太多的if-else不太直觀,難以維護(hù)。 

以下面代碼為例,展示幾種替代if else的方法。

String input = "three";

  @Test
  public void testElse() {
    if ("one".equals(input)) {
      System.out.println("one");
    } else if ("two".equals(input)) {
      System.out.println("two");
    } else if ("three".equals(input)) {
      System.out.println("three");
    } else if ("four".equals(input)) {
      System.out.println("four");
    }
  } 

需要引入Spring跟Guava依賴

1.Spring結(jié)合策略模式

Spring可以將一組實(shí)現(xiàn)了同樣接口的類注入一個(gè)List

/***
 * 定義接口。type用來(lái)路由具體的Handler實(shí)現(xiàn)
 * */
public interface Handler {
  String getType();

  void execute();
}
 /**
   * 將Handler接口的實(shí)現(xiàn)類注入一個(gè)List
   * */
  @Autowired
  private List<Handler> handlerList;
  @Test
  public void testAutowireList(){
  // 根據(jù)類型判斷該由哪個(gè)具體實(shí)現(xiàn)類處理
     for(Handler handler:handlerList){
       if(input.equals(handler.getType())){
         handler.execute();
       }
     }
  } 

下面是幾種輕量級(jí)實(shí)現(xiàn).

2. 反射

通過(guò)反射動(dòng)態(tài)調(diào)用相應(yīng)的方法

/***
 *定義每種類型所對(duì)應(yīng)的方法
*/
public class ReflectTest {
  public void methodOne() {
    System.out.println("one");
  }

  public void methodTwo() {
    System.out.println("two");
  }

  public void methodThree() {
    System.out.println("three");
  }

  public void methodFour() {
    System.out.println("four");
  }

}

 /***
   *
   * 通過(guò)反射,動(dòng)態(tài)調(diào)用方法。采用了Guava的工具類。
   * */
  @Test
  public void testReflect() throws Exception {
    //首字母大寫,根據(jù)類型拼接方法
    String methodName = "method" + LOWER_CAMEL.to(UPPER_CAMEL, input);
    Method method = ReflectTest.class.getDeclaredMethod(methodName);
    Invokable<ReflectTest, Object> invokable =
        (Invokable<ReflectTest, Object>) Invokable.from(method);
    invokable.invoke(new ReflectTest());
  } 

3. lambda表達(dá)式

實(shí)現(xiàn)同上面的反射,結(jié)合了Java 8的新特性:lambda表達(dá)式

  @Test
  public void testJava8() {
    Map<String, Consumer<ReflectTest>> functionMap = Maps.newHashMap();
    functionMap.put("one", ReflectTest::methodOne);
    functionMap.put("two", ReflectTest::methodTwo);
    functionMap.put("three", ReflectTest::methodThree);
    functionMap.put("four", ReflectTest::methodThree);
    functionMap.get(input).accept(new ReflectTest());
  } 

4. 枚舉

在枚舉里面定義一個(gè)抽象方法,每種類型對(duì)應(yīng)各自的具體實(shí)現(xiàn)。

/**
 * 定義枚舉類,包含了所有類型
 */
public enum EnumTest {


  ONE("one") {
    @Override
    public void apply() {
      System.out.println("one");
    }
  },
  TWO("two") {
    @Override
    public void apply() {
      System.out.println("two");
    }
  }, THREE("three") {
    @Override
    public void apply() {
      System.out.println("three");
    }
  }, FOUR("four") {
    @Override
    public void apply() {
      System.out.println("four");
    }
  };

  public abstract void apply();

  private String type;

  EnumTest(String type) {
    this.type = type;
  }

  public String getType() {
    return type;
  }

}
 // 枚舉測(cè)試
 @Test
  public void testEnum() {
    EnumTest.valueOf(input.toUpperCase()).apply();
  }

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

相關(guān)文章

  • Java實(shí)現(xiàn)PNG圖片格式轉(zhuǎn)BMP圖片格式

    Java實(shí)現(xiàn)PNG圖片格式轉(zhuǎn)BMP圖片格式

    在實(shí)際開發(fā)中,有時(shí)需要在不同平臺(tái)、不同應(yīng)用場(chǎng)景中對(duì)圖片格式進(jìn)行轉(zhuǎn)換,本文主要介紹了如何使用 Java 語(yǔ)言實(shí)現(xiàn)將 PNG 格式的圖片轉(zhuǎn)換為 BMP 格式的圖片,需要的可以了解下
    2025-03-03
  • SpringBoot學(xué)習(xí)系列之MyBatis Plus整合封裝的實(shí)例詳解

    SpringBoot學(xué)習(xí)系列之MyBatis Plus整合封裝的實(shí)例詳解

    MyBatis-Plus是一款MyBatis的增強(qiáng)工具(簡(jiǎn)稱MP),為簡(jiǎn)化開發(fā)、提高效率,這篇文章給大家介紹MyBatis Plus整合封裝的實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧
    2020-08-08
  • 完美解決Get和Post請(qǐng)求中文亂碼的問題

    完美解決Get和Post請(qǐng)求中文亂碼的問題

    下面小編就為大家?guī)?lái)一篇完美解決Get和Post請(qǐng)求中文亂碼的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • mybatis和mybatis-plus同時(shí)使用的坑

    mybatis和mybatis-plus同時(shí)使用的坑

    本文主要介紹了mybatis和mybatis-plus同時(shí)使用的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 使用TraceId在Spring Cloud中實(shí)現(xiàn)線上問題快速定位

    使用TraceId在Spring Cloud中實(shí)現(xiàn)線上問題快速定位

    在微服務(wù)架構(gòu)中,服務(wù)間的互相調(diào)用使得問題定位變得復(fù)雜,在此背景下,TraceId為我們提供了一個(gè)在復(fù)雜環(huán)境中追蹤請(qǐng)求路徑和定位問題的工具,本文不僅介紹TraceId的基本概念,還將結(jié)合真實(shí)場(chǎng)景,為您展示如何在Spring Cloud中應(yīng)用它
    2023-09-09
  • 淺談java中六大時(shí)間類的使用和區(qū)別

    淺談java中六大時(shí)間類的使用和區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談java中六大時(shí)間類的使用和區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • java 中歸并排序算法詳解

    java 中歸并排序算法詳解

    這篇文章主要介紹了java 中歸并排序算法詳解的相關(guān)資料,歸并排序算法又稱為合并排序算法,是一種時(shí)間復(fù)雜度為O(N logN)的排序算法,因而其在平常生活工作中應(yīng)用非常廣泛,需要的朋友可以參考下
    2017-09-09
  • Java?shiro安全框架使用介紹

    Java?shiro安全框架使用介紹

    安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會(huì)發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會(huì)出現(xiàn)問題,這篇文章主要介紹了SpringBoot安全管理Shiro框架的使用
    2022-08-08
  • javax.persistence中@Column定義字段類型方式

    javax.persistence中@Column定義字段類型方式

    這篇文章主要介紹了javax.persistence中@Column定義字段類型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java異步判斷線程池所有任務(wù)是否執(zhí)行完成的操作方法

    Java異步判斷線程池所有任務(wù)是否執(zhí)行完成的操作方法

    這篇文章主要介紹了Java異步判斷線程池所有任務(wù)是否執(zhí)行完成的方法,在這個(gè)示例中,我使用了傳統(tǒng)的匿名內(nèi)部類來(lái)創(chuàng)建Callable任務(wù)(同時(shí)也提供了Lambda表達(dá)式的注釋),以便與各種Java版本兼容,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

沿河| 梓潼县| 哈巴河县| 延寿县| 裕民县| 昭平县| 柳江县| 高平市| 德昌县| 金门县| 玉田县| 基隆市| 蓬安县| 白银市| 长子县| 平塘县| 琼结县| 梅河口市| 娄底市| 石狮市| 镇安县| 南雄市| 安塞县| 钦州市| 中宁县| 沾化县| 木里| 凭祥市| 屏山县| 钟祥市| 方城县| 丹巴县| 喀喇| 安宁市| 通山县| 始兴县| 辉南县| 郧西县| 松原市| 榆树市| 五寨县|