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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 重构 if else_java中繁杂的if/else怎么重构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

if條件判斷是程序中最基本也最常用的判斷,但是如果設(shè)計(jì)的不好,會(huì)在代碼中發(fā)現(xiàn)嵌套很多層的if/else,寫(xiě)的人可能覺(jué)得沒(méi)什么,但看的和維護(hù)的時(shí)候,把人拉去祭天的心都有。

本文就寫(xiě)一下重構(gòu)多層嵌套if的方法。

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

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

方法1 提前return

如下面這個(gè)例子

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 策略模式

一個(gè)例子

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

}

策略模式有多種實(shí)現(xiàn)方式:

方式2.1 多態(tài)

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

}

}

初始化時(shí),把各種策略對(duì)象放到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();

}

再直接調(diào)用

Java

ParamRoute paramRoute = map.valueOf(param);

paramRoute.run();

1

2

ParamRouteparamRoute=map.valueOf(param);

paramRoute.run();

方法3 Optional

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

如下面這個(gè)例子

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 表驅(qū)動(dòng)法

如果對(duì)數(shù)據(jù)庫(kù)知識(shí)有了解的話,會(huì)知道從表里查一條數(shù)據(jù)非常便捷。那在java代碼中有沒(méi)有類似表的結(jié)構(gòu)呢,數(shù)組和Map就可以看做一種簡(jiǎn)單的表。如下例:

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];

}

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。