Java--自定義註解

Java–反射

來自對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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章