web 應用在接受表單提交的資料後都需要對其進行合法性檢查,如果表單資料不合法,請求將被駁回。類似的,當我們在編寫類的方法時,也常常需要對方法入參進行合 法性檢查,如果入參不符合要求,方法將通過丟擲異常的方式拒絕後續處理。舉乙個例子:有乙個根據檔名獲取輸入流的方法:inputstream getdata(string file),為了使方法能夠成功執行,必須保證 file 入參不能為 null 或空白字元,否則根本無須進行後繼的處理。這時方法的編寫者通常會在方法體的最前面編寫一段對入參進行檢測的**,如下所示:
public inputstream getdata(string file)
… }
類似以上檢測方法入參的**是非常常見,但是在每個方法中都使用手工編寫檢測邏輯的方式並不是乙個好主意。閱讀 spring 原始碼,您會發現 spring 採用乙個 org.springframework.util.assert 通用類完成這一任務。
assert 翻譯為中文為「斷言」,使用過 junit 的讀者都熟知這個概念,它斷定某乙個實際的執行值和預期想一樣,否則就丟擲異常。spring 對方法入參的檢測借用了這個概念,其提供的 assert 類擁有眾多按規則對方法入參進行斷言的方法,可以滿足大部分方法入參檢測的要求。這些斷言方法在入參不滿足要求時就會丟擲 illegalargumentexception。下面,我們來認識一下 assert 類中的常用斷言方法:
斷言方法 說明
1. notnull(object object)
當 object 不為 null 時丟擲異常,notnull(object object, string message) 方法允許您通過 message 定製異常資訊。和 notnull() 方法斷言規則相反的方法是 isnull(object object)/isnull(object object, string message),它要求入參一定是 null;
2. istrue(boolean expression) / istrue(boolean expression, string message)
當 expression 不為 true 丟擲異常;
3. 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 型別的入參進行判斷;
4. haslength(string text) / haslength(string text, string message) 當 text 為 null 或長度為 0 時丟擲異常;
5. hastext(string text) / hastext(string text, string message) text 不能為 null 且必須至少包含乙個非空格的字元,否則丟擲異常;
6. isinstanceof(class clazz, object obj) / isinstanceof(class type, object obj, string message) 如果 obj 不能被正確造型為 clazz 指定的類將丟擲異常;
7. 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)
可見使用 spring 的 assert 替代自編碼實現的入參檢測邏輯後,方法的簡潔性得到了不少的提高。assert 不依賴於 spring 容器,您可以大膽地在自己的應用中使用這個工具類.
原生JS Array方法入坑記錄
map foreach 方法用來遍歷陣列,都不可以用break,continue跳出迴圈。1.map 有返回值 找了很多部落格只是說了要這麼用 let array 1,2,3 let newarray array.map function item,index 但是,我發現也可以這麼用 array....
DWR呼叫入參為Map的方法
在頁面中通過dwr技術呼叫入參為map的後台方法時,只需要在頁面中定義如下格式的函式就可以了 var mapit 我頁面的實現 var bigclassselect document.getelementbyid imtypeid var bigclassvalue bigclassselect.o...
C 四捨五入的方法
c 四捨五入的方法 原創半開半落 發布於2019 06 17 22 12 39 閱讀數 2423 收藏 展開在c 中要實現四捨五入的方法主要有三種 1一.使用round 方法進行輸出 double z1 55.686 double z math.round z1,2 輸出結果為 55.69 deci...