1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京北大青鳥

    全國咨詢電話:15195455103

    三分鐘了解北大青鳥
    當前位置:南京北大青鳥 > 學習園地 > 編程技巧

    Java注解

    來源:南京北大青鳥張府園校區? ? ? 作者:IT教育 ? ??

    注解目前非常的流行,很多主流框架都支持注解,而且自己編寫代碼的時候也會盡量的去用注解,一時方便,而是代碼更加簡潔。

    注解目前非常的流行,很多主流框架都支持注解,而且自己編寫代碼的時候也會盡量的去用注解,一時方便,而是代碼更加簡潔。

    注解的語法比較簡單,除了@符號的使用之外,它基本與Java固有語法一致。Java SE5內置了三種標準注解:

    @Override,表示當前的方法定義將覆蓋超類中的方法。

    @Deprecated,使用了注解為它的元素編譯器將發出警告,因為注解@Deprecated是不贊成使用的代碼,被棄用的代碼。

    @SuppressWarnings,關閉不當編譯器警告信息。

    上面這三個注解多少我們都會在寫代碼的時候遇到。Java還提供了4中注解,專門負責新注解的創建。

    @Target

    表示該注解可以用于什么地方,可能的ElementType參數有:

    CONSTRUCTOR:構造器的聲明

    FIELD:域聲明(包括enum實例)

    LOCAL_VARIABLE:局部變量聲明

    METHOD:方法聲明

    PACKAGE:包聲明

    PARAMETER:參數聲明

    TYPE:類、接口(包括注解類型)或enum聲明

    @Retention

    表示需要在什么級別保存該注解信息??蛇x的RetentionPolicy參數包括:

    SOURCE:注解將被編譯器丟棄

    CLASS:注解在class文件中可用,但會被VM丟棄

    RUNTIME:VM將在運行期間保留注解,因此可以通過反射機制讀取注解的信息。

    @Document

    將注解包含在Javadoc中

    @Inherited

    允許子類繼承父類中的注解

     

    定義一個注解的方式:

    1 @Target(ElementType.METHOD)
    2 @Retention(RetentionPolicy.RUNTIME)
    3 public @interface Test {
    4
    5 }
    除了@符號,注解很像是一個接口。定義注解的時候需要用到元注解,上面用到了@Target和@RetentionPolicy,它們的含義在上面的表格中已近給出。

    在注解中一般會有一些元素以表示某些值。注解的元素看起來就像接口的方法,唯一的區別在于可以為其制定默認值。沒有元素的注解稱為標記注解,上面的@Test就是一個標記注解。

    注解的可用的類型包括以下幾種:所有基本類型、String、Class、enum、Annotation、以上類型的數組形式。元素不能有不確定的值,即要么有默認值,要么在使用注解的時候提供元素的值。而且元素不能使用null作為默認值。注解在只有一個元素且該元素的名稱是value的情況下,在使用注解的時候可以省略“value=”,直接寫需要的值即可。

    下面看一個定義了元素的注解。

    1 @Target(ElementType.METHOD)
    2 @Retention(RetentionPolicy.RUNTIME)
    3 public @interface UseCase {
    4     public String id();
    5     public String description() default "no description";
    6 }
    定義了注解,必然要去使用注解。

    1 public class PasswordUtils {
    2     @UseCase(id = 47, description = "Passwords must contain at least one numeric")
    3     public boolean validatePassword(String password) {
    4         return (password.matches("\\w*\\d\\w*"));
    5     }
    6
    7     @UseCase(id = 48)
    8     public String encryptPassword(String password) {
    9         return new StringBuilder(password).reverse().toString();
    10     }
    11 }

    使用注解主要的部分在于對注解的處理,那么就會涉及到注解處理器。

    從原理上講,注解處理器就是通過反射機制獲取被檢查方法上的注解信息,然后根據注解元素的值進行特定的處理。

    1 public static void main(String[] args) {
    2     List<Integer> useCases = new ArrayList<Integer>();
    3     Collections.addAll(useCases, 47, 48, 49, 50);
    4     trackUseCases(useCases, PasswordUtils.class);
    5 }
    6
    7 public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
    8     for (Method m : cl.getDeclaredMethods()) {
    9         UseCase uc = m.getAnnotation(UseCase.class);
    10         if (uc != null) {
    11             System.out.println("Found Use Case:" + uc.id() + " "
    12                         + uc.description());
    13             useCases.remove(new Integer(uc.id()));
    14         }
    15     }
    16     for (int i : useCases) {
    17         System.out.println("Warning: Missing use case-" + i);
    18     }
    19 }

    Found Use Case:47 Passwords must contain at least one numeric

    Found Use Case:48 no description

    Warning: Missing use case-49

    Warning: Missing use case-50


    分享到:

    相關閱讀:

    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 亚州AV综合色区无码一区| 久久综合五月婷婷| 色综合久久久久久久久久| 婷婷五月综合色中文字幕| 亚洲综合色区在线观看| 久久综合五月婷婷| 色青青草原桃花久久综合| 三级韩国一区久久二区综合| 伊人久久青草青青综合| 三级韩国一区久久二区综合| 久久一本色系列综合色| 国产精品综合久久第一页| 亚洲综合欧美色五月俺也去 | 国产香蕉久久精品综合网| 伊人久久成人成综合网222| 久久综合久久自在自线精品自 | 久久综合鬼色88久久精品综合自在自线噜噜 | 色综合网站国产麻豆| 综合无码一区二区三区| 亚洲七久久之综合七久久| 久久婷婷五月综合97色一本一本| 亚洲综合精品网站在线观看| 色综合天天综合网站中国| 久久婷婷五月综合色高清| 一本大道久久a久久精品综合| 人妻一本久道久久综合久久鬼色| 色偷偷狠狠色综合网| 尹人久久大香找蕉综合影院| 久久亚洲精品高潮综合色a片| 久久综合亚洲鲁鲁五月天| 色爱无码AV综合区| 亚洲综合激情五月色一区| 狠狠色丁香婷婷综合久久片| 婷婷丁香五月天综合东京热| 色噜噜狠狠色综合中文字幕| 狠狠色综合网站久久久久久久| 久久综合五月丁香久久激情| 婷婷五月综合缴情在线视频| 久久婷婷五月综合色丁香| 国产亚洲综合久久| 日韩人妻无码一区二区三区综合部|