來自對codeSheep的總結
1.註解是什麼:
註解是寫給程序看的(類似於標籤),註釋寫給人看的。
2.出現的位置:
類、方法、變量、接口、形參位置等。
3.註解分類:
自定義註解、JDK內置註解、還有第三方框架提供的註解。
4.註解的作用:
讓代碼更加簡潔。代碼生成,數據校驗,資源整合等。
5.手寫一個註解:
如果沒有註解,想要校驗,我們只能通過手寫if來判斷。
①定義註解:@Length
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Length {
int min(); //允許字符串長度的最小值
int max(); //允許字符串長度的最大值
String errorMsg(); //自定義的錯誤提示信息
}
②獲取註解並對其進行驗證
public class TestAnno {
private Long id;
private String name;
@Length(min=11, max=11, errorMsg = "錯誤,電話號碼的長度必須爲11位")
private String mobile;//手機號碼(11位)
public static String validate(Object object) throws IllegalAccessException {
//首先通過反射獲取object對象的類有哪些字段
//對本文來說就可以獲取到student類的id、name、mobile字段
Field[] fields =object.getClass().getDeclaredFields();
//for循環逐個字段校驗,看哪個字段上標記了註解。
for (Field field : fields){
//if判斷:檢查該字段上y有沒有標記了Length註解
if (field.isAnnotationPresent(Length.class)){
//通過反射獲取到該字段上標註的@Length註解的詳細信息
Length length=field.getAnnotation(Length.class);
field.setAccessible(true);//反射時能訪問到私有變量
//用過反射獲取字段的實際值
int value=( (String) field.get(object)).length();
//將字段的實際值和註解上做標示的值進行對比
if (value<length.min() || value>length.max()){
return length.errorMsg();
}
}
}
return "符合標準";
}
public static void main(String[] args) throws Exception{
TestAnno ta = new TestAnno();
//設置一個不符合條件的值進行驗證
ta.mobile="123456";
String test = ta.validate(ta);
System.out.println(test);
}
}