java編程中的斷言工具類(org.springframework.util.Assert)__編程

來源:互聯網
上載者:User

斷言工具類:Assert類, java.lang.Object --->org.springframework.util.Assert  

先舉個例子,

當我們在編寫類的方法時,常常需要對方法入參進行合法性檢查,如果入參不符合要求,方法將通過拋出異常的方式拒絕後續處理。如下所示:

public InputStream getData(String file) {

         if (file == null || file.length() == 0|| file.replaceAll("\\s", "").length() == 0) {

                  throw new IllegalArgumentException("file入參不是有效檔案地址");

         }

          …

}

類似以上檢測方法入參的代碼是非常常見,但是在每個方法中都使用手工編寫檢測邏輯的方式並不是一個好主意。閱讀 Spring 源碼,您會發現 Spring 採用一個 org.springframework.util.Assert 通用類完成這一任務。

Assert 翻譯為中文為“斷言”,使用過 JUnit 的讀者都熟知這個概念,它斷定某一個實際的運行值和預期想一樣,否則就拋出異常。Spring 對方法入參的檢測借用了這個概念,其提供的 Assert 類擁有眾多按規則對方法入參進行斷言的方法,可以滿足大部分方法入參檢測的要求。這些斷言方法在入參不滿足要求時就會拋出 IllegalArgumentException。下面,我們來認識一下 Assert 類中的常用斷言方法:

斷言方法 說明
notNull(Object object) 當 object 為 null 時拋出異常,notNull(Object object, String message) 方法允許您通過 message 定製異常資訊。和 notNull() 方法斷言規則相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入參一定是 null;
isTrue(boolean expression) / isTrue(boolean expression, String message) 當 expression 不為 true 拋出異常;
notEmpty(Collection collection) / notEmpty(Collection collection, String message) 當集合未包含元素時拋出異常。notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分別對 Map 和 Object[] 類型的入參進行判斷;
hasLength(String text) / hasLength(String text, String message) 當 text 為 null 或長度為 0 時拋出異常;
hasText(String text) / hasText(String text, String message) text 不能為 null 且必須至少包含一個非空格的字元,否則拋出異常;
isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message) 如果 obj 不能被正確造型為 clazz 指定的類將拋出異常;
isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message) subType 必須可以按類型匹配於 superType,否則將拋出異常;

 

使用 Assert 斷言類可以簡化方法入參檢測的代碼,如 InputStream getData(String file) 在應用 Assert 斷言類後,其代碼可以簡化為以下的形式:

public InputStream getData(String file){
         Assert.hasText(file,"file入參不是有效檔案地址");
         ① 使用 Spring 斷言類進行方法入參檢測
          …
 }

可見使用 Spring 的 Assert 替代自編碼實現的入參檢測邏輯後,方法的簡潔性得到了不少的提高。Assert 不依賴於 Spring 容器,您可以大膽地在自己的應用中使用這個工具類。


方法摘要
static void doesNotContain(java.lang.String textToSearch, java.lang.String substring)
          斷言,給定的文本不包含給定的子串。
static void doesNotContain(java.lang.String textToSearch, java.lang.String substring, java.lang.String message)
          斷言,給定的文本不包含給定的子串。
static void hasLength(java.lang.String text)
          斷言,由於String是不是空的,也就是說,它不能null ,而不是Null 字元串。
static void hasLength(java.lang.String text, java.lang.String message)
          斷言,由於String是不是空的,也就是說,它不能null ,而不是Null 字元串。
static void hasText(java.lang.String text)
          斷言定String具有有效常值內容,即它不能null ,並且必須至少包含一個非空白字元。
static void hasText(java.lang.String text, java.lang.String message)
          斷言定String具有有效常值內容,即它不能null ,並且必須至少包含一個非空白字元。
static void isAssignable(java.lang.Class superType, java.lang.Class subType)
          斷言superType.isAssignableFrom(subType)是true 。
static void isAssignable(java.lang.Class superType, java.lang.Class subType, java.lang.String message)
          斷言superType.isAssignableFrom(subType)是true 。
static void isInstanceOf(java.lang.Class clazz, java.lang.Object obj)
          斷言提供的對象是所提供的類的執行個體。
static void isInstanceOf(java.lang.Class type, java.lang.Object obj, java.lang.String message)
          斷言提供的對象是所提供的類的執行個體。
static void isNull(java.lang.Object object)
          斷言一個對象是null 。
static void isNull(java.lang.Object object, java.lang.String message)
          斷言一個對象是null 。
static void isTrue(boolean expression)
          斷言一個布林運算式,扔IllegalArgumentException如果測試結果是false 。
static void isTrue(boolean expression, java.lang.String message)
          斷言一個布林運算式,扔IllegalArgumentException如果測試結果是false 。
static void noNullElements(java.lang.Object[] array)
          斷言一個數組沒有null元素。
static void noNullElements(java.lang.Object[] array, java.lang.String message)
          斷言一個數組沒有null元素。
static void notEmpty(java.util.Collection collection)
          斷言,一個集合有元素,也就是說,它不能null ,而且必須有至少一個元素。
static void notEmpty(java.util.Collection collection, java.lang.String message)
          斷言,一個集合有元素,也就是說,它不能null ,而且必須有至少一個元素。
static void notEmpty(java.util.Map map)
          斷言,一個地圖的作品,也就是說,它不能null ,並且必須至少有一個條目。
static void notEmpty(java.util.Map map, java.lang.String message)
          斷言,一個地圖的作品,也就是說,它不能null ,並且必須至少有一個條目。
static void notEmpty(java.lang.Object[] array)
          斷言一個數組元素,即它不能null ,而且必須有至少一個元素。
static void notEmpty(java.lang.Object[] array, java.lang.String message)
          斷言一個數組元素,即它不能null ,而且必須有至少一個元素。
static void notNull(java.lang.Object object)
          斷言一個對象不null 。
static void notNull(java.lang.Object object, java.lang.String message)
          斷言一個對象不null 。
static void state(boolean expression)
          斷言一個布林運算式,扔IllegalStateException如果測試結果是false 。
static void state(boolean expression, java.lang.String message)
          斷言一個布林運算式,扔IllegalStateException如果測試結果是false 。
 
從類 java.lang.Object 繼承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.