我目前在編寫a small argument checking library for Java。檢查被寫在這樣一個流暢的接口方式:參數檢查庫 - 隱式/顯式NULL檢查的參數
Check.that(name).matches("hello .*!").hasLenghtBetween(0, 20);
Check.that(list).isNullOr().hasSize(0);
Check.that(args).named("arguments").isNotEmpty();
到目前爲止,這些檢查的語義是,他們也隱含斷言參數不爲null。要允許爲空,可以使用第二個示例中的isNullOr()
修改器方法。
我想補充的下一件事是檢查反轉這樣的支持:
Check.that(name).not().matches("hello .*!");
但現在我覺得默認的NULL的含量操作變得怪異和不直觀。反轉測試的正確方法是現在允許null。要禁止空,一個人必須要明確地預先考慮isNotNull()
檢查:
Check.that(name).isNotNull().not().matches("hello .*!");
正因爲如此,我的想法改變了語義使NULL的含量總是需要檢查明確。我知道一個項目也是這樣做的:Bean Validation。但缺點是,這可能會使約90%的檢查延長12個字符,因爲無論如何,null通常都是無效的參數。
因此,長話短說:針對隱式空檢查的爭論和反對意見是什麼?也許有其他圖書館或標準可以這樣做或以其他方式?
你有機會看看http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/Validate.html嗎? – Vikdor
是的,他們採取了隱含的策略。但是,這一事實本身並不能幫助我*很多*。 – rolve