這篇文章主要介紹“java中減少ifelse編碼習(xí)慣的方法有哪些”,在日常操作中,相信很多人在java中減少ifelse編碼習(xí)慣的方法有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”java中減少ifelse編碼習(xí)慣的方法有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元秦淮做網(wǎng)站,已為上家服務(wù),為秦淮各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220方式一 : 提前return
首先展示一段代碼示例 :
if (condition1) { if (condition2) { return getSomething(); } else { return 0; }} else { return 0;}
修改后的代碼如下 :
//這里好對(duì)這個(gè)flag所判斷的邏輯補(bǔ)充注釋進(jìn)行描述boolean flag = !condition1 || (condition1 && !condition2)if(flag) { return 0;}if (condition1 && condition2) { return getSomething();}
如果存在已知在某些條件下 , 需要返回固定值的邏輯 , 可以將這部分邏輯抽取為一個(gè)獨(dú)立的 if-else block , 并置于其他if-else block的前面 , 當(dāng)符合該特定條件時(shí) , 直接提前 return 固定值 . 這種方式最直接的效果就是降低if-else的嵌套數(shù)量 .
方式二 : 使用三目運(yùn)算符
先上例子 , 這里以一個(gè)業(yè)務(wù)場(chǎng)景為例 :
查詢某條評(píng)論的圖片URL列表 (如果有 , 評(píng)論的圖片url列表以JSON數(shù)組字符串格式保存在評(píng)論表中)
修改前的代碼如下 :
Comment comment = getById(commentId);if (Objects.isNull(comment)) { throw new RuntimeException("評(píng)論不存在或已被刪除");}String imgListStr = comment.getImgList();if(StringUtils.isEmpty(imgListStr)) { return null;}return JSON.parseArray(imgListStr, String.class);
修改后 :
Comment comment = getById(commentId);if (Objects.isNull(comment)) { throw new RuntimeException("評(píng)論不存在或已被刪除");}String imgListStr = comment.getImgList();return StringUtils.isEmpty(imgListStr)) ? null : JSON.parseArray(imgListStr, String.class);
方式三 : 使用Assert斷言
在編寫(xiě)業(yè)務(wù)代碼過(guò)程中 , 如果需要對(duì)某些特定的條件進(jìn)行判斷 , 且當(dāng)條件不滿足時(shí)需要拋出異常 . 對(duì)于這種場(chǎng)景 , 除了使用上面三目運(yùn)算符的示例當(dāng)中的if方式 , 還可以通過(guò)使用Spring Framework 給我們提供的 Assert 工具類(lèi)進(jìn)行 .其中常用的API 有 :
isTrue(boolean expression , String message) : 當(dāng)expressio == false時(shí) , 會(huì)拋出異常 , 異常的message則為第二個(gè)入?yún)?; void notNull(@Nullable Object object, String message) : 同上 , 當(dāng)object == null 時(shí) , 會(huì)拋出異常; void notEmpty(@Nullable Collection<?> collection, String message) : 同上 , 當(dāng)集合對(duì)象為null或者集合元素為空時(shí) , 會(huì)拋出異常 . .....
還有其他較多方法 , 可以直接看源碼的解析 , 當(dāng)然實(shí)際上isTrue() 已經(jīng)夠用了 , 如果需要更加的語(yǔ)義化 , 可以使用對(duì)應(yīng)的API .
修改前代碼 :
if (Objects.isNull(comment)) { throw new RuntimeException("評(píng)論不存在或已被刪除");}
修改后代碼 :
Assert.isTrue(Objects.nonNull(comment),"評(píng)論不存在或已被刪除"); Assert.notNull(comment,"評(píng)論不存在或已被刪除");
目前Assert工具方法只能拋出單一一種異常 java.lang.IllegalArgumentException , 如果需要自定義所拋出的異常 , 則該方式不適用 .
方式四 : 使用Optional
Optional是 java8 的新特性 , 相當(dāng)于一個(gè)對(duì)象的容器 , 主要用于對(duì)象的null值校驗(yàn) , 以及在進(jìn)行校驗(yàn)后可鏈?zhǔn)降剡M(jìn)行后續(xù)操作 , 如 : 拋出異常、null替換 等 .
其中我個(gè)人比較常用的幾個(gè)方法為 :
static <T> Optional<T> ofNullable(T value) : 使用Optional 將對(duì)象進(jìn)行包裹 ; T orElse(T other) : Optional中的對(duì)象為null時(shí) ,返回入?yún)⒌膶?duì)象 . T orElseGet(Supplier<? extends T> other) : Optional中的對(duì)象為null時(shí) , 返回Supplier 提供的值 ; T orElseThrow(Supplier<? extends X> exceptionSupplier) : Optional中的對(duì)象為null時(shí) , 拋出supplier提供的自定義異常
代碼示例 :
Message message1 = Optional.ofNullable(getById(messageId)) .orElseThrow(() -> new RuntimeException("消息不存在!"));Message message2 = Optional.ofNullable(getById(messageId)) .orElse(new Message());Message message3 = Optional.ofNullable(getById(messageId)) .orElseGet(Message::new);
由于我日常需要的進(jìn)行空值判斷的比較多的場(chǎng)景是從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)完畢時(shí) , 需要查詢結(jié)果進(jìn)行空值判斷 . 由于我所在的公司使用的持久層框架是mybatis , 不像Spirng Boot 2.x 默認(rèn)版本的JPA 那樣DAO層方法支持返回值為Optional , 所以這里如果需要使用Optional , 只能手動(dòng)去使用上面列舉的第一個(gè)方法對(duì)查詢結(jié)果進(jìn)行包裝 .
到此,關(guān)于“java中減少ifelse編碼習(xí)慣的方法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
文章題目:java中減少ifelse編碼習(xí)慣的方法有哪些-創(chuàng)新互聯(lián)
當(dāng)前地址:http://www.rwnh.cn/article8/hsiip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、軟件開(kāi)發(fā)、網(wǎng)站內(nèi)鏈、商城網(wǎng)站、定制開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容