精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

程序員你如何檢查參數的合法性?

開發 前端
大部分的方法和構造函數對傳入的參數值有一些限制,比如:常見的索引值必須是非負數,對象引用不能為空。你應該使用清晰的文檔來標注所有的這些限制,然后在方法體開始的地方強制他們檢查。

作為程序員的你,代碼中最多的就是各種方法了,你是如何對參數進行校驗的呢?

背景

大部分的方法和構造函數對傳入的參數值有一些限制,比如:常見的索引值必須是非負數,對象引用不能為空。

你應該使用清晰的文檔來標注所有的這些限制,然后在方法體開始的地方強制他們檢查。

[[342104]]

應該在錯誤發生的時候盡快的檢查出來,這是基本原則。

如果你不這么做,當錯誤發生的時候,錯誤將不會被檢測出來,這讓定位錯誤的源頭變得更困難。

如果一個非法參數傳遞到一個方法中,在方法執行前進行了參數檢查。它將會快速失敗,并給出清晰的異常信息。

如果方法沒有檢查參數,下面這些事情會發生。

程度說明

  • 糟糕方法會在執行過程中失敗然后拋出一個不明確的異常;
  • 更糟糕方法會正常返回,但是悄悄的計算了一個錯誤的值。

最糟糕方法正常返回,但是一些對象處在一個不正確的狀態,未來一個不確定的時間點在某些無關聯的點會造成一個錯誤。

一句話總結:參數不校驗會導致原子性失敗。

推薦做法

對公共和保護方法,使用java文檔的@throws標簽來標注參數值不合法將拋出的異常。

常見的參數校驗的異常類型如下:

只要你已經已經在文檔中標注了方法參數的限制和違反限制會拋出的異常,限制將是一個簡單的事情,下面是一個典型的例子。

  1. /** 
  2. *@param m 必須是正整數 
  3. *@throws ArithmeticException 如果m<=0 
  4. **/ 
  5. public BigInteger mod(BigInteger m){ 
  6.     if(m<=0){ 
  7.         throw new ArithmeticException("modulus <=0: "+ m); 
  8.     }    //todo 其它代碼 

注意:

  • 文檔注釋并沒有說, 如果m是空,mod將拋出NullPointException, 盡管這個方法確實會這樣。調用m.signum()的時候這個異常被標注在類級別BigInteger的文檔注釋上,類級別的注釋適用于所有的公共方法的參數,這是一個避免在每個方法單獨的文檔化標注NullPointException這種混亂的好方法。

也許可以結合@Nullable或者類似的注解來指明特殊參數可以為空,但是這個實踐并不是標準的,并且有很多注解可以用來達到這個目的。

Objects實用類

Objects.requireNonNull方法,在Java7中添加的,非常的靈活和方便,所以沒有理由手動的執行空指針檢查。 你也可以指定異常的詳細信息,這個方法返回自己的輸入,所以你可以在使用該值的時候執行一個空指針檢查。

  1. //一行代碼使用java的空指針檢查 
  2. this.strategy = Objects.requireNonNull(strategy,"strategy"

如果你可以忽略返回值,你也可以根據你的需要使用Objects.requireNonNull作為獨立的空指針檢查。在Java9中,一個范圍檢查的方法被添加到了java.util.Objects中,包含了3個方法:

這3個方法沒有空指針檢查方法靈活,它無法讓你指定自己的異常詳細信息,它被設計用在List和Array的索引檢查上。 它也無法處理閉區間,但是只要你需要,這就是一個小便利。

Java斷言

對一個不開放的方法,你作為包的作者,控制著方法的調用狀況,你必須保證只有合法的參數值傳遞進去了。所以,對非公開的方法,你可以使用斷言來進行參數檢查,如下所示:

  1. //私有幫助排序函數 
  2. private static void sort(long a[] , int offset, int length){ 
  3.     assert a != null ;    //更多代碼 

本質上來講,斷言申明條件一定是true , 忽略客戶端如何使用對應的包。跟一般的合法性檢查不同,斷言失敗的時候拋出AssertError;跟一般的合法性檢查不同,除非你啟用他們否則斷言對你沒有任何影響和消耗。在java命令行啟用指令:

  1. -ea 
  2. 或者 
  3. -enableassertions 

更多斷言的信息,查看java手冊的Asserts;

檢查參數的合法性非常重要,即使你的方法中沒有用到,但是存儲起來了,后面會用到。

舉個例子: 靜態工廠方法: 輸入一個 int數組 ,返回一個array的 list視圖, 如果客戶端傳入 null, 這個方法會拋出NPE, 因為方法會有一個直接檢查,調用了Objects.requireNonNull。如果忽略檢查,方法會返回一個引用新創建的List的實例;

而客戶端嘗試使用的時候回拋出NPE; 這個時候,原始的List實例很難決定,很大可能會復雜到變成一個調試任務。

構造函數代表了一個特殊例子的原則: 你應該檢查即將存儲稍后會用到的參數的合法性。

檢查構造函數參數的合法性非常重要,它可以防止構造一個違反類的不變性的對象。

異常情況

在執行方法計算之前,你應該檢查方法參數 。 這個規則也有異常情況。

一個重要的異常情況是:合法性檢查代價非常高并且重要, 并且檢查是在執行計算的過程中執行的。舉個例子:有一個方法對一個對象list排序,比如 Collectios.sort(list),所有的list中的對象必須是可互相比較的。在處理list比較的時候,每個對象將會跟其它的對象進行比較,

如果對象不能互相比較,其中一個或多個比較會拋出ClassCastException,這是排序方法應該做的。

所以:這里有一個小店,在開始的時候檢查列表中的元素應該是可以互相比較的,注意:修改合法性檢查會喪失原子失敗。

偶爾,一個計算執行了一個需要的合法性檢查,但是當執行檢查失敗的時候,拋出了一個錯誤的異常。換句話說,計算常常會拋出參數合法性檢查的異常,并不會匹配方法在文檔中申明的異常。這種場景下,你應該使用異常翻譯成語。 轉換自然異常為正確的異常。

這個原則并不是說武斷的限制參數是一件好事,而是說:你應該設計通用實際的方法。假設你的方法接受所有的參數組合而可以做一些合理事情,你的參數限制越少越好,然而,一些限制本質上在抽象類中已經被實現了。

小結

如果看完之后你只能記住一句話:每次你寫一個方法或者一個構造函數,你應該思考參數的限制是否存在,你應該把限制寫在文檔中,并在方法體的開始部分確保進行了檢查。

養成這個習慣很重要,適當的工作會在第一次合法性檢查失敗的時候回饋你。

 

程序員你如何檢查參數的合法性?

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2015-07-28 09:54:43

2020-06-05 07:42:16

參數驗證合法

2009-05-21 15:58:12

程序員工作經驗職場

2013-06-17 11:01:49

程序員離職

2015-04-10 19:37:34

程序員

2015-12-14 17:26:42

程序員生活

2015-12-07 11:44:31

程序員厭倦工作

2015-12-09 09:17:11

情緒厭倦程序員

2012-04-26 17:12:36

程序員夢想

2013-03-18 09:34:35

Office 365云計算

2021-07-26 18:14:58

人臉識別AI人工智能

2011-05-18 15:32:02

程序員

2013-08-20 09:33:59

程序員

2014-12-01 10:05:25

程序員

2020-03-02 15:15:37

程序員工資協議

2014-07-14 11:28:41

2015-09-16 11:32:38

程序員匠心

2012-09-10 09:16:54

2012-10-22 16:21:15

程序員編程

2009-01-08 09:04:18

點贊
收藏

51CTO技術棧公眾號

视频三区在线观看| 欧美爱爱小视频| 国产福利91精品一区二区| 国产精品久久久久久久岛一牛影视| 成人黄色免费片| 久久精品美女视频| 精品国产1区| 日韩欧美综合一区| 国产日韩成人内射视频| 18视频在线观看网站| 久久久久久99久久久精品网站| 国产精品自产拍在线观看中文| 免费人成在线观看| 欧洲杯什么时候开赛| 欧美v国产在线一区二区三区| 精品久久久久久久免费人妻| a级网站在线播放| 久久久99精品免费观看| 成人欧美一区二区三区在线观看| 蜜臀尤物一区二区三区直播| 国产精品mm| 日韩中文字幕在线视频| 中文字幕av网址| 欧洲大片精品免费永久看nba| 在线观看不卡一区| 国产综合av在线| 一色桃子av在线| 国产精品欧美一区喷水| 欧美凹凸一区二区三区视频| 精品久久人妻av中文字幕| 久久久噜噜噜久久狠狠50岁| 欧美极品少妇全裸体| 蜜桃av免费观看| 欧美猛男做受videos| 亚洲精品一区二区三区香蕉| 三级性生活视频| 国产精品久久久久久妇女| 午夜精品在线看| 成人小视频在线观看免费| av在线播放网| 国产午夜亚洲精品羞羞网站| 精品久久久久久乱码天堂| 精品人妻一区二区三区四区不卡| 老色鬼精品视频在线观看播放| 欧美一区二三区| 日本熟女一区二区| 1024精品一区二区三区| 欧美裸体xxxx极品少妇| 91高清免费观看| 97色伦图片97综合影院| 中文字幕亚洲一区| 黄色三级生活片| 精品美女视频| 伊人久久五月天| 蜜桃传媒一区二区亚洲| 最近国产精品视频| 亚洲人成网站999久久久综合| www国产视频| 久久97久久97精品免视看秋霞| 日韩精品一区二区三区蜜臀| 2018国产精品| 国产精品香蕉| 亚洲成人黄色网址| 无码任你躁久久久久久老妇| 欧美日韩一区二区三区在线电影| 亚洲黄色www| 性欧美成人播放77777| 奇米影视777在线欧美电影观看| 亚洲精品久久久久久久久久久久久| 女性生殖扒开酷刑vk| 国产成人一二片| 亚洲美女性生活视频| 久久亚洲AV无码专区成人国产| 久久99影视| 色青青草原桃花久久综合| 麻豆精品国产免费| 国产精品mv在线观看| 欧美激情视频给我| 中文字幕激情小说| 奇米777欧美一区二区| 成人写真视频福利网| 亚洲精品久久久狠狠狠爱| 不卡的av网站| 日韩理论片在线观看| 四虎久久免费| 亚洲图片一区二区| 热久久精品国产| 先锋影音一区二区| 亚洲成人免费网站| 免费看的黄色网| 欧美精选一区| 日韩av黄色在线观看| 一级黄在线观看| 成人动漫视频在线| 深田咏美在线x99av| av网址在线播放| 欧美午夜久久久| www.精品在线| 加勒比色综合久久久久久久久| 亚洲深夜福利在线| 精品99久久久久成人网站免费| 午夜一级在线看亚洲| 成人在线小视频| 天堂成人在线视频| 日韩美女啊v在线免费观看| 无码人妻少妇伦在线电影| 国产精品一区二区免费福利视频 | 91亚洲精品国产| 美女一区网站| 日韩欧美中文一区| 国产综合精品久久久久成人av| 尤物精品在线| 成人免费视频97| 国产在线网站| 五月婷婷色综合| 污视频在线观看免费网站| 深爱激情久久| 国内精品久久久久影院优| 亚洲一级av毛片| 久久毛片高清国产| 黄网站欧美内射| 麻豆国产一区二区三区四区| 国产亚洲日本欧美韩国| 日韩福利片在线观看| 国内外成人在线视频| 日韩福利一区二区三区| av在线资源| 日韩欧美一级二级三级| 天堂а√在线中文在线鲁大师| 男女精品视频| 国产精品有限公司| 中文在线字幕免费观看| 欧美日韩国产中文| 最近中文字幕在线mv视频在线 | 免费99精品国产自在在线| 波多野结衣一区二区三区四区| 99久久er热在这里只有精品66| 潘金莲一级淫片aaaaa免费看| 日韩一区二区三区免费| 精品香蕉在线观看视频一| 国产中文字幕免费| 国产传媒欧美日韩成人| 五月天在线免费视频| 日本免费一区二区三区等视频| 国产亚洲日本欧美韩国| 中文精品久久久久人妻不卡| 久久这里只有精品视频网| 日本a视频在线观看| 狠狠久久伊人| 国内精久久久久久久久久人| 成人午夜精品福利免费| 亚洲丰满少妇videoshd| 欧美xxxxx精品| 亚洲毛片一区| 久久国产精品99久久久久久丝袜| 欧美办公室脚交xxxx| 亚洲精品国产精品久久清纯直播| 国产一级性生活| 成人黄页毛片网站| 波多野结衣家庭教师在线播放| 嫩草国产精品入口| 欧美一级高清免费| 国产小视频免费在线观看| 在线观看不卡视频| 三级黄色在线观看| 国产精品88av| 人妻av中文系列| 性欧美xxxx免费岛国不卡电影| 青青久久aⅴ北条麻妃| 黄上黄在线观看| 欧美色电影在线| 成人免费视频网站入口::| 国产福利一区在线观看| www.射射射| 国产欧美日韩| 成人在线视频网| 免费毛片在线看片免费丝瓜视频| 亚洲精品久久久久久久久久久久| 男人天堂视频网| 1024精品合集| 美女搡bbb又爽又猛又黄www| 久久久久久久欧美精品| 国产对白在线播放| 久久国产精品免费精品3p| 日韩av电影免费观看高清| 免费黄色电影在线观看| 国产欧美精品一区二区三区-老狼| 日韩国产亚洲欧美| 亚洲美腿欧美偷拍| 亚洲欧美日韩色| 日本欧洲一区二区| 国产精品69久久久| 清纯唯美日韩| 国产精品播放| 成人在线不卡| 国模gogo一区二区大胆私拍 | 亚洲欧美在线x视频| 天堂免费在线视频| 一区二区在线免费观看| 中文字幕人妻一区二区| 国产一区二区久久| 欧洲av无码放荡人妇网站| 99久久夜色精品国产亚洲1000部| 国产欧美日韩综合精品二区| 久久不卡日韩美女| 午夜精品福利在线观看| 一级日本在线| 日韩精品999| 亚洲国产精品一| 欧美视频精品在线观看| 久久精品性爱视频| 亚洲婷婷国产精品电影人久久| 无码一区二区精品| 国产麻豆成人精品| 九色porny自拍| 国产日韩高清一区二区三区在线| 香蕉视频免费版| 日韩免费av| 久久99欧美| 亚洲一区二区三区在线免费| 国产日韩中文字幕| 日韩av中字| 国自产精品手机在线观看视频| 麻豆tv入口在线看| 一区二区三区无码高清视频| 色婷婷av一区二区三区之红樱桃| 欧美精选在线播放| 伊人色综合久久久| 91久久精品国产91性色tv| 免费在线观看黄网站| 一区二区三区日韩欧美精品| 亚洲AV成人无码精电影在线| 日本一区二区三区在线观看| 爱爱的免费视频| 99久久精品国产一区| fc2成人免费视频| 国产成人av影院| 人妻激情偷乱视频一区二区三区| 麻豆精品在线视频| 亚洲黄色av网址| 日韩av电影天堂| 男人的天堂日韩| 香蕉久久国产| 日本久久久精品视频| 亚洲一区二区毛片| 欧美亚洲一二三区| 亚洲日产国产精品| 久久视频这里有精品| 最新国产拍偷乱拍精品| 亚洲精品久久久久久久蜜桃臀| 国产一区欧美| bt天堂新版中文在线地址| 欧美破处大片在线视频| 91免费国产精品| 激情自拍一区| av黄色在线网站| 天堂成人免费av电影一区| 成人免费无码av| 日韩av中文字幕一区二区三区| 免费激情视频在线观看| 免费美女久久99| gai在线观看免费高清| 激情五月激情综合网| 亚洲精品国产久| 成人一级视频在线观看| 成人啪啪18免费游戏链接| 波多野结衣91| 免费一级做a爰片久久毛片潮| 国产婷婷一区二区| 亚洲区一区二区三| 一区二区三区在线观看视频| 国产一级生活片| 欧美视频在线观看 亚洲欧| www.日韩一区| 欧美一区二区三区公司| 熟妇人妻中文av无码| 亚洲午夜av电影| 毛片av在线| 午夜欧美不卡精品aaaaa| 国产日韩电影| 91久久精品视频| 久久aimee| 亚洲欧美在线网| 欧美日本久久| 国产精品无码专区av在线播放| 久久99热国产| 强迫凌虐淫辱の牝奴在线观看| 久久精品欧美日韩精品| 久久久久久久久毛片| 欧美日韩中文在线| 国产精品国产三级国产普通话对白| 精品国产一区二区三区av性色| 黄色小视频在线免费观看| 久久综合色影院| 三上悠亚激情av一区二区三区 | 欧美精品videos性欧美| 毛片无码国产| 91麻豆精品秘密入口| 欧美美乳视频| 国产精品一线二线三线| 日本欧美久久久久免费播放网| 成人在线观看一区二区| 国产精品嫩草影院av蜜臀| 久久露脸国语精品国产91| 欧美日韩一区三区四区| 无码国精品一区二区免费蜜桃| 中文字幕在线看视频国产欧美在线看完整 | 伊人久久精品视频| 17videosex性欧美| 91夜夜揉人人捏人人添红杏| 九九热线有精品视频99| 2018中文字幕第一页| 久久国产尿小便嘘嘘| 亚欧洲乱码视频| 亚洲自拍偷拍麻豆| 一区二区美女视频| 亚洲欧美色婷婷| 黄在线观看免费网站ktv| 96久久精品| 欧美mv日韩| 五月天亚洲视频| 久久男人中文字幕资源站| 久久综合亚洲色hezyo国产| 欧美男人的天堂一二区| 国产亚洲依依| 91av在线不卡| 波多野结衣欧美| 四虎4hu永久免费入口| 美女在线一区二区| 实拍女处破www免费看| 亚洲国产精品久久不卡毛片 | 国产激情视频一区二区在线观看 | 一本一道波多野毛片中文在线 | 91成人在线观看喷潮教学| 国产伦精品一区二区三区免费迷| 国产黄色片在线| 在线亚洲免费视频| 国产三级在线观看| 日本精品在线视频 | 精品一区二区三区四区| av第一福利在线导航| 动漫一区二区在线| 黄色工厂这里只有精品| 国产精品91av| 亚洲国产欧美在线| 欧美一级一区二区三区| 久久久久国色av免费观看性色| 成人激情自拍| 欧美精品久久久久久久久久久| 99久久免费精品| 久久青青草视频| 亚洲欧美日韩区| 成人免费福利| 香蕉久久免费影视| 毛片av一区二区三区| 999精品在线视频| 日韩精品中文字幕一区| 国产网红在线观看| 精品久久久久久亚洲| 男人的天堂成人在线| 级毛片内射视频| 欧美精品一二三区| 宅男在线观看免费高清网站| 99久久精品免费看国产四区| 激情91久久| 三级黄色片网站| 欧美在线观看禁18| 麻豆av在线免费看| 草莓视频一区| 久久久人人人| 日韩欧美视频免费观看| 日韩一区二区麻豆国产| 24小时免费看片在线观看| 欧美一区二区在线视频观看| 免费精品视频在线| 美女福利视频在线观看| 亚洲国产欧美一区| 欧美一级大黄| 国产精品久久成人免费观看| 成人毛片老司机大片| 久久久久久久久久成人| 久久精品久久久久久国产 免费| 99re8这里有精品热视频8在线 | 韩国精品免费视频| 伊人国产在线观看| 伊人男人综合视频网| 911精品国产| 一本岛在线视频| 亚洲成人精品影院| aⅴ在线视频男人的天堂| 草莓视频一区| 免费看日韩精品| 日韩视频免费观看高清| 色噜噜国产精品视频一区二区 | 国产成人免费9x9x人网站视频| 成人手机在线播放| 久久久精品中文字幕麻豆发布| 国产91视频在线| 国产成人一区二| 影音先锋久久|