1. 程式人生 > >你可能不知道的程式碼小技巧(一)

你可能不知道的程式碼小技巧(一)

  在我們日常寫程式碼過程中經常會遇到一些非常簡單但是必須需要書寫的程式碼,但是使得我們程式碼不夠優雅,比如判空,獲取hash值,判斷是否相等,這些程式碼簡單,但是經常需要書寫,那我們能不能用更加優雅的處理它們?

       今天介紹一下如何一行程式碼處理那些板樣程式碼,第一期主要是對判空做一些優雅的建議

50a400027cd4b4edeae4

請點選此處輸入圖片描述

50a10004710f57994fa2

請點選此處輸入圖片描述

        為了減少板樣程式碼對業務程式碼的入侵,首先我們可以使用jdk的Objects

Objects.requireNonNull(str)//f引數為空會丟擲NullPointerException
Objects.requireNonNull(str,"str can't be null")//f引數為空會丟擲NullPointerException,message 為第二個引數
Objects.requireNonNull(str,()->"str can't be null")//f引數為空會丟擲NullPointerException,第二個是一個lambda表示式生成一個message

如果我們需要在判空的邏輯裡面需要做邏輯怎麼辦?

可以使用

if(Objects.isNull(str)){//null 返回true
    //TODO something
}
if(Objects.nonNull(str)){//null返回false
    //TODO something
}

除此以外我們在java8 以及guava裡面引入了Optional這個類,簡單介紹一下java8的Optional

50a1000484ef25aaf326

java8 Optional類

這個類的結構很簡單,一個泛型類,裡面只放我們需要的值,進行一個包裝一樣,成員方法主要是進行一些判空操作。我就簡單介紹一下用法。

509f0004ab266d3a544b

請點選此處輸入圖片描述

其實在Optional裡面用到大量的Objects類,對於一般的物件以上基本可以滿足需求,讓你程式碼看起來就會逼格就不一樣了。

        但是有一些特殊的物件還需要特殊的判斷,比如String,以及各種集合類,我們可以使用commons包,裡面的,以及StringUtils對String進行操作,比如isEmpty(String str)(null,以及空字串返回true),isNotEmpty(String str),remove,contains等操作,雖然String本身就有remove這些操作但是有可能當物件為null時會拋空指標異常,比如

String s=null;
s.contains("123");//丟擲空指標String s=null;StringUtils.contains(s,"123");//這裡會對null進行判斷,返回false

除此以外還有提供空字串常量StringUtils.EMPTY  目的是減少魔法數值使用

對於集合類也有類似的工具類CollectionUtils,提供判空CollectionUtils.isEmpty(Collection c)(集合為空或者為null返回true),以及對集合操作。

以上基本上是優化判空程式碼層面的優化。

對於Objects類還有比較物件的equals(Object a,Object b)方法,針對陣列的deepEquals的方法,hashCode(Object o)

hash(Object... values),compare(T a,T b,Compare<? super T> c)

其最大的好處就是:

  1. 減少我們寫邏輯重複的板樣程式碼

  2. 減少我們對null的判斷,減少不必要的空指標異常

所以建議對 String以及集合的各種操作儘可能使用成熟的jdk工具或第三方庫比如guava,減少板樣程式碼,以及一些不必要的問題發生,這些工具類使用起來也很簡單。

以上只是對優化判空程式碼的建議,有不足之處,希望多多提一些建議

第一期比較簡單,下期還有試用的騷操作~敬請關注