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中經常出現...