guava 學習筆記1---使用瓜娃(guava)的選擇和預判斷使代碼變得簡潔

1,本文翻譯自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code-with-guava-optionals-and-preconditions/,有說的不對的地方,歡迎斧正。

2,我開發軟件的時候,朝着乾淨代碼發展是我的特權,有一段時間,我曾在我幾乎所有的項目中使用谷歌瓜娃(Google Guava),理由很簡單,guava爲我編寫漂亮代碼提供了很大的便利,今天,我想向你展示下我是怎麼使用預判斷來避免不必要的if/throw 申明,使用選擇來提升代碼邏輯性。

  預判斷並不是新東西,Apache Commons項目有類似的功能,但是並沒有瓜娃提供的解決方案簡潔,預判斷用來驗證方法的參數,狀態等等,當條件判斷結果是false,預判斷就會拋出預想的異常,預想的意味着以下情形,當檢查狀態的時候,你可以使用Preconditions.checkState( 條件 ),如果條件判斷的結果是false,將會拋出非法狀態異常,同樣,另外一種預判斷checkArgument會拋出非法參數異常,當然,使用預判斷你唯一需要明確的時候就是使用靜態導入,讓我們來看一個例子。

  給出的是一個方法,接受list作爲參數,當這個方法被調用的時候,我們需要檢查list是不是null和是不是空,一般的java解決方案如下所示:

 

public void doSomething( List<Object> list ) {
  if( list == null ) {
    throw new IllegalArgumentException( "List must not be null" );
  }
  if( list.isEmpty() ) {
    throw new IllegalArgumentException( "List must not be empty" );
  }
  doSomethingMore( list );
}

  當使用guava的預判斷,代碼的數量明顯減少,解決方案如下所示.

public void doSomething( List<Object> list ) {
  checkArgument( list != null, "List must not be null" );
  checkArgument( !list.isEmpty(), "List must not be empty" );
  doSomethingMore( list );
}

  這肯定是一個提升,但是,當這個方法結合瓜娃的選擇變得真正的性感,選擇是一個概念,被設計來避免病態的null概念(閱讀這裏理解我爲神馬叫她“病態”),這裏明顯有一個對象容器來避免空引用,例如,null 大部分時間用來檢查一個對象是不是存在,如果不存在,一個空指針異常發生了,結果如以下代碼所示:

public void doSomething() {
  if( this.field == null ) {
    throw new IllegalStateException( "Field is not initialized" );
  }
  doSomethingMore();
}

  與其保存這個對象直接放到field,我經常使用選擇.這避免了我代碼中的空指針異常並且顯得更合語法,上面這個例子結合選擇變成了如下所示:

public void doSomething() {
  checkState( field.isPresent(), "Argument is not initialied" );
  doSomethingMore();
}

最後,由你決定這個代碼是不是更好更簡潔,通過使用預判斷和選擇.從我的觀點來看,這麼寫更具有可讀性,我期待在評論中聽到你的觀點icon wink Cleaner Code with Guava Optionals and Preconditions .

no pays,no gains!
發佈了26 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章