Java和C#下的參數(shù)驗(yàn)證方法
參數(shù)的輸入和驗(yàn)證問題是開發(fā)時(shí)經(jīng)常遇到的,一般的驗(yàn)證方法如下:
public bool Register(string name, int age) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException("name should not be empty", "name"); } if (age < 10 || age > 70) { throw new ArgumentException("the age must between 10 and 70","age"); } //... }
這樣做當(dāng)需求變動(dòng)的時(shí)候,要改動(dòng)的代碼相應(yīng)的也比較多,這樣比較麻煩,最近接觸到了Java和C#下2種方便的參數(shù)驗(yàn)證方法,簡(jiǎn)單的介紹下。
Java參數(shù)驗(yàn)證:
采用google的guava下的一個(gè)輔助類:
import com.google.common.base.Preconditions;
示例代碼:
public static void checkPersonInfo(int age, String name){ Preconditions.checkNotNull(name, "name為null"); Preconditions.checkArgument(name.length() > 0, "name的長(zhǎng)度要大于0"); Preconditions.checkArgument(age > 0, "age必須大于0"); System.out.println("a person age: " + age + ", name: " + name); } public static void getPostCode(String code){ Preconditions.checkArgument(checkPostCode(code),"郵政編碼不符合要求"); System.out.println(code); } public static void main(String[] args) { try { checkPersonInfo(10,"fdsfsd"); checkPersonInfo(10,null); checkPersonInfo(-10,"fdsfsd"); getPostCode("012234"); } catch (Exception e) { e.printStackTrace(); } }
當(dāng)參數(shù)不滿足要求的時(shí)候,拋出異常信息,異常中攜帶的信息為后面自定義的字符串,這樣寫就方便多了。
C#參數(shù)驗(yàn)證:
采用FluentValidation這個(gè)類庫,參考地址在下面。
使用方法:
一個(gè)簡(jiǎn)單的Person類:
public class Person { public string Name { set; get; } public int Age { set; get; } public Person(string name, int age) { Name = name; Age = age; } }
Person的驗(yàn)證類:
public class PersonValidator : AbstractValidator<Person> { public PersonValidator() { RuleFor(x => x.Name).NotEmpty().WithMessage("姓名不能為空"); RuleFor(x => x.Name).Length(1,50).WithMessage("姓名字符不能超過50"); RuleFor(x => x.Age).GreaterThan(0).WithMessage("年齡必須要大于0"); } private bool ValidName(string name) { // custom name validating logic goes here return true; } }
使用:
class Program { static void Main(string[] args) { Person customer = new Person(null,-10); PersonValidator validator = new PersonValidator(); ValidationResult results = validator.Validate(customer); bool validationSucceeded = results.IsValid; IList<ValidationFailure> failures = results.Errors; foreach (var failure in failures) { Console.WriteLine(failure.ErrorMessage); } Console.ReadKey(); } }
FluentValidation的使用文檔:http://fluentvalidation.codeplex.com/documentation
以上就是小編為大家?guī)淼腏ava和C#下的參數(shù)驗(yàn)證方法的全部?jī)?nèi)容了,希望對(duì)大家有所幫助,多多支持腳本之家~
- Unity中C#和Java的相互調(diào)用實(shí)例代碼
- java使用jna調(diào)用c#中dll的方法詳解
- 詳解Kotlin中如何實(shí)現(xiàn)類似Java或C#中的靜態(tài)方法
- 淺談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字
- Java和C#輸入輸出流的方法(詳解)
- C#與Java的MD5簡(jiǎn)單驗(yàn)證(實(shí)例代碼)
- C#調(diào)用Java方法實(shí)例詳解
- 一種c#深拷貝方式完勝java深拷貝(實(shí)現(xiàn)上的對(duì)比分析)
- 如何批量清理系統(tǒng)臨時(shí)文件(語言:C#、 C/C++、 php 、python 、java )
- C# 調(diào)用 JavaWebservice服務(wù)遇到的問題匯總
- String.Format大全(C# Java)
- Android仿微信菜單(Menu)(使用C#和Java分別實(shí)現(xiàn))
- 淺談C#與Java兩種語言的比較
相關(guān)文章
Java開發(fā)常見錯(cuò)誤之?dāng)?shù)值計(jì)算精度和舍入問題詳析
除了使用Double保存浮點(diǎn)數(shù)可能帶來精度問題外,更匪夷所思的是這種精度問題,下面這篇文章主要給大家介紹了關(guān)于Java開發(fā)常見錯(cuò)誤之?dāng)?shù)值計(jì)算精度和舍入問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11濫用@PathVariable導(dǎo)致bug原因分析解決
這篇文章主要為大家介紹了濫用@PathVariable導(dǎo)致bug原因分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12詳解@Autowired(required=false)注入注意的問題
這篇文章主要介紹了@Autowired(required=false)注入注意的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04spring-core組件詳解——PropertyResolver屬性解決器
這篇文章主要介紹了spring-core組件詳解——PropertyResolver屬性解決器,需要的朋友可以參考下2016-05-05Java?awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)方式
這篇文章主要介紹了Java?awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12