Java 程式開發中if else多層巢狀的優化

2021-09-08 05:52:09 字數 2761 閱讀 7631

if else作為每種程式語言都不可或缺的條件語句,我們在程式設計時會大量的用到。但if else一般不建議巢狀超過三層,如果一段**存在過多的if else巢狀,**的可讀性就會急速下降,後期維護難度也大大提高。所以,程式設計師都應該盡量避免過多的if else巢狀。下面將會簡單談談如何減少if else的巢狀。

private static final int type_title = 0;

private static final int type_content = 1;

private static final int type_link = 2;

public class newitem

public inte***ce sharenewlistener

業務實現:如下

public void share (newitem item, sharenewlistener listener)  else 

}} else if (item.type == type_title ) else

}} else if (item.type == type_content) else

}} else

}} else

}}

if else巢狀一般是為了解決空值判斷,業務判斷,狀態判斷等問題。針對這些問題可以通過下述方法進行優化:

方法一:介面分層

所謂介面分層指的是:把介面分為外部和內部介面,所有空值判斷放在外部介面完成,只處理一次;而內部介面傳入的變數由外部介面保證不為空,從而減少空值判斷。

public void share(newitem item, sharenewlistener listener) 

return;

}if (listener == null)

shareimpl(item, listener);

}private void shareimpl(shareitem item, sharenewlistener listener) else

}} else if (item.type == type_title ) else

}} else if (item.type == type_content) else

}} else

}}

方法二:多型

利用多型,每種業務單獨處理,在介面不再做任何業務判斷。

private static final int type_title = 0;

private static final int type_content = 1;

private static final int type_link = 2;

public abstract class newitem

public abstract void doshare(sharenewlistener listener);

}public class new_title extends newitem

@override

public void doshare(sharenewlistener listener)

}public class new_content extends newitem

@override

public void doshare(sharenewlistener listener)

}public class new_link extends newitem

@override

public void doshare(sharenewlistener listener)

}public void share(newitem item, sharenewlistener listener)

return;

}if (listener == null)

shareimpl(item, listener);

}private void shareimpl(newitem item, sharenewlistener listener)

public shareitem createnew_titleitem(string title)

public shareitem createnew_contentitem(string content)

public shareitem createnew_linkitem(string link)

方法三:使用map替代分支語句

把所有分享子型別預先快取在map裡,那麼就可以直接get獲取具體型別,消除分支

private map> map = new hashmap<>();

private void init()

public newitem createnewitem(int type) catch (exception e)

}

總結

1.把介面分為外部和內部介面,所有空值判斷放在外部介面完成;而內部介面傳入的變數由外部介面保證不為空,從而減少空值判斷。

2.利用多型,把業務判斷消除,各子類分別關注自己的實現,並實現子類的建立方法,避免使用者了解過多的類。

3.把分支狀態資訊預先快取在map裡,直接get獲取具體值,消除分支。

參考:

利用if,else編寫簡單java程式

package yg public class jshv 通過執行,if語句的用法如下 if else 語句引入了一種二義性問題稱為空懸else dangling else 問題,這種問題出現在當if 子句多於else 子句時。問題是這些else 子句分別和哪乙個if 子句匹配。例如 程式的縮排形式...

Java中多個ifelse語句的替代設計

ifelse是任何程式語言的重要組成部分。但是我們編寫了大量巢狀的if語句,這使得我們的 更加複雜和難以維護。接下來,讓我們探索如何簡化 的中的ifelse語句寫法。我們經常遇到涉及很多條件的業務邏輯,並且每個邏輯都需要不同的處理方式。以calculator類為例。我們將有乙個方法,它接受兩個數字和...

Java學習 ifelse的簡略

在開發中if else 是經常用到的,有時還會巢狀n多成,這樣有時會讓 看著非常凌亂。接下來給大家講一種ifelse的簡略方法 if is true else 這個 很簡單,但有時需要大量的轉換的時候就很費勁了。比如 if num 0 num 1 else num 0 這種 在遊戲的map中經常出現...