日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 重构 if else_java中繁杂的if/else怎么重构

發布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 重构 if else_java中繁杂的if/else怎么重构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

if條件判斷是程序中最基本也最常用的判斷,但是如果設計的不好,會在代碼中發現嵌套很多層的if/else,寫的人可能覺得沒什么,但看的和維護的時候,把人拉去祭天的心都有。

本文就寫一下重構多層嵌套if的方法。

首先我們要有一個原則:一個方法中的if嵌套不要超過3層,否則不易于閱讀和維護。

好,原則有了,那我們就要盡量往原則上靠。

方法1 提前return

如下面這個例子

Java

if (condition){

// do something

} else {

return '';

}

1

2

3

4

5

if(condition){

// do something

}else{

return'';

}

可以直接改成這樣

Java

if (!condition){

return '';

}

// do something

1

2

3

4

5

if(!condition){

return'';

}

// do something

方法2 策略模式

一個例子

Java

if (paramRoute.equals("a"){

// do something

} else if (paramRoute.equals("b"){

// do something

} else if (paramRoute.equals("c"){

// do something

} else {

// do something

}

1

2

3

4

5

6

7

8

9

if(paramRoute.equals("a"){

// do something

}elseif(paramRoute.equals("b"){

// do something

}elseif(paramRoute.equals("c"){

// do something

}else{

// do something

}

策略模式有多種實現方式:

方式2.1 多態

Java

interface ParamRoute {

void run() throws Exception;

}

class ParamA implements ParamRoute {

@Override

void run() throws Exception{

// do something

}

}

class ParamB implements ParamRoute {

@Override

void run() throws Exception{

// do something

}

}

class ParamC implements ParamRoute {

@Override

void run() throws Exception{

// do something

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

interfaceParamRoute{

voidrun()throwsException;

}

classParamAimplementsParamRoute{

@Override

voidrun()throwsException{

// do something

}

}

classParamBimplementsParamRoute{

@Override

voidrun()throwsException{

// do something

}

}

classParamCimplementsParamRoute{

@Override

voidrun()throwsException{

// do something

}

}

初始化時,把各種策略對象放到Map中

Java

ParamRoute paramRoute = map.get(param);

paramRoute.run();

1

2

ParamRouteparamRoute=map.get(param);

paramRoute.run();

方式2.2 枚舉

Java

public enum ParamRoute{

ParamA {

@Override

void run(){

// do something

}

},

ParamB { @Override void run(){ // do something } },

ParamC { @Override void run(){ // do something } };

abstract void run();

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

publicenumParamRoute{

ParamA{

@Override

voidrun(){

// do something

}

},

ParamB{@Overridevoidrun(){// do something } },

ParamC{@Overridevoidrun(){// do something } };

abstractvoidrun();

}

再直接調用

Java

ParamRoute paramRoute = map.valueOf(param);

paramRoute.run();

1

2

ParamRouteparamRoute=map.valueOf(param);

paramRoute.run();

方法3 Optional

這是JDK8的新特性,用于非空判斷。

如下面這個例子

Java

if (condition){

// do something

} else {

return '';

}

1

2

3

4

5

if(condition){

// do something

}else{

return'';

}

可以直接改成這樣

Java

Optional optional = Optional.ofNullable(param);

// action1 和 action2 分別是不同的方法

optional.map(action1).orElse(action2);

1

2

3

Optionaloptional=Optional.ofNullable(param);

// action1 和 action2 分別是不同的方法

optional.map(action1).orElse(action2);

方法4 表驅動法

如果對數據庫知識有了解的話,會知道從表里查一條數據非常便捷。那在java代碼中有沒有類似表的結構呢,數組和Map就可以看做一種簡單的表。如下例:

int getDays(int month){

if ( month == 1) return 31;

if ( month == 2) return 29;

if ( month == 3) return 31;

// 略去一部分月份

if ( month == 11) return 30;

if ( month == 12) return 31;

}

1

2

3

4

5

6

7

8

intgetDays(intmonth){

if(month==1)return31;

if(month==2)return29;

if(month==3)return31;

// 略去一部分月份

if(month==11)return30;

if(month==12)return31;

}

改成:

Java

int monthDays[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int getDays(int month){

return monthDays[--month];

}

1

2

3

4

5

intmonthDays[12]={31,29,31,30,31,30,31,31,30,31,30,31};

intgetDays(intmonth){

returnmonthDays[--month];

}

總結

以上是生活随笔為你收集整理的java 重构 if else_java中繁杂的if/else怎么重构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。