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è)類庫(kù),參考地址在下面。
使用方法:
一個(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í)文件(語(yǔ)言:C#、 C/C++、 php 、python 、java )
- C# 調(diào)用 JavaWebservice服務(wù)遇到的問題匯總
- String.Format大全(C# Java)
- Android仿微信菜單(Menu)(使用C#和Java分別實(shí)現(xiàn))
- 淺談C#與Java兩種語(yǔ)言的比較
相關(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-04
spring-core組件詳解——PropertyResolver屬性解決器
這篇文章主要介紹了spring-core組件詳解——PropertyResolver屬性解決器,需要的朋友可以參考下2016-05-05
Java?awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)方式
這篇文章主要介紹了Java?awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

