注解annotation

什么是注解

注解(Annotation) 提供了一種安全的類似注釋的機(jī)制辩稽,為我們在代碼中添加信息提供了一種形式化得方法废境,使我們可以在稍后某個時刻方便的使用這些數(shù)據(jù)(通過解析注解來使用這些 數(shù)據(jù))耽梅,用來將任何的信息或者元數(shù)據(jù)與程序元素(類挨约、方法、成員變量等)進(jìn)行關(guān)聯(lián)儒飒。其實就是更加直觀更加明了的說明谬莹,這些說明信息與程序業(yè)務(wù)邏輯沒有關(guān) 系,并且是供指定的工具或框架使用的桩了。Annotation像一種修飾符一樣附帽,應(yīng)用于包、類型井誉、構(gòu)造方法蕉扮、方法、成員變量颗圣、參數(shù)及本地變量的申明語句中喳钟。
Annotation其實是一種接口。通過java的反射機(jī)制相關(guān)的API來訪問Annotation信息在岂。相關(guān)類(框架或工具中的類)根據(jù)這些信息來決定如何使用該程序元素或改變它們的行為奔则。Java語言解釋器在工作時會忽略這些Annotation,因此在JVM中這些Annotation是“不起作用”的洁段,只能通過配套的工具才能對這些Annotation類型的信息進(jìn)行訪問和處理应狱。

Java SE5內(nèi)置了三種標(biāo)準(zhǔn)注解

  • @Override,表示當(dāng)前的方法定義將覆蓋超類中的方法祠丝。
  • @Deprecated疾呻,使用了注解為它的元素編譯器將發(fā)出警告除嘹,因為注解 @Deprecated是不贊成使用的代碼,被棄用的代碼岸蜗。
  • @SuppressWarnings尉咕,關(guān)閉不當(dāng)編譯器警告信息。

Java提供了4中注解璃岳,專門負(fù)責(zé)新注解的創(chuàng)建

  • @Documented –注解是否將包含在JavaDoc中
  • @Retention –什么時候使用該注解
  • @Target –注解用于什么地方
  • @Inherited – 是否允許子類繼承該注解


    image.png

定義注解的方式

注解的可用的類型包括以下幾種:所有基本類型年缎、String、Class铃慷、enum单芜、Annotation、以上類型的數(shù)組形式犁柜。元素不能有不確定的值洲鸠,即要么有默認(rèn)值,要么在使用注解的時候提供元素的值馋缅。而且元素不能使用null作為默認(rèn)值扒腕。注解在只有一個元素且該元素的名稱是value的情況下,在使用注解的時候可以省略“value=”萤悴,直接寫需要的值即可瘾腰。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
     public String id();
     public String description() default "no description";
}

使用注解

public class PasswordUtils {
     @UseCase(id = 47, description = "Passwords must contain at least one numeric")
     public boolean validatePassword(String password) {
         return (password.matches("\\w*\\d\\w*"));
     }
 
     @UseCase(id = 48)
     public String encryptPassword(String password) {
         return new StringBuilder(password).reverse().toString();
     }
 }

注解處理器

public static void main(String[] args) {
     List<Integer> useCases = new ArrayList<Integer>();
     Collections.addAll(useCases, 47, 48, 49, 50);
     trackUseCases(useCases, PasswordUtils.class);
 }
 //方法注解 
 public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
     for (Method m : cl.getDeclaredMethods()) {
         UseCase uc = m.getAnnotation(UseCase.class);
         if (uc != null) {
             System.out.println("Found Use Case:" + uc.id() + " "
                         + uc.description());
             useCases.remove(new Integer(uc.id()));
         }
     }
     for (int i : useCases) {
         System.out.println("Warning: Missing use case-" + i);
     }
 }
//字段注解
public static String getFiledComment(Object obj, String fieldName) {

        Field[] fields =obj.getClass().getDeclaredFields();
        String filedComment = "";
        for (Field field : fields) {
            if (fieldName.equals(field.getName())) {
                FieldComment fieldCommentAnnotation = field.getAnnotation(FieldComment.class);
                filedComment = fieldCommentAnnotation.desc();
                break;
            }

        }
        return filedComment;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市覆履,隨后出現(xiàn)的幾起案子蹋盆,更是在濱河造成了極大的恐慌,老刑警劉巖内狗,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怪嫌,死亡現(xiàn)場離奇詭異义锥,居然都是意外死亡柳沙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門拌倍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赂鲤,“玉大人,你說我怎么就攤上這事柱恤∈酰” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵梗顺,是天一觀的道長泡孩。 經(jīng)常有香客問我,道長寺谤,這世上最難降的妖魔是什么仑鸥? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任吮播,我火速辦了婚禮,結(jié)果婚禮上眼俊,老公的妹妹穿的比我還像新娘意狠。我一直安慰自己,他們只是感情好疮胖,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布环戈。 她就那樣靜靜地躺著,像睡著了一般澎灸。 火紅的嫁衣襯著肌膚如雪院塞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天性昭,我揣著相機(jī)與錄音迫悠,去河邊找鬼。 笑死巩梢,一個胖子當(dāng)著我的面吹牛创泄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播括蝠,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鞠抑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忌警?” 一聲冷哼從身側(cè)響起搁拙,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤法绵,失蹤者是張志新(化名)和其女友劉穎箕速,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朋譬,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡盐茎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了徙赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片字柠。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狡赐,靈堂內(nèi)的尸體忽然破棺而出窑业,到底是詐尸還是另有隱情,我是刑警寧澤枕屉,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布常柄,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏西潘。R本人自食惡果不足惜铜异,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秸架。 院中可真熱鬧揍庄,春花似錦、人聲如沸东抹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缭黔。三九已至食茎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間馏谨,已是汗流浹背别渔。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留惧互,地道東北人滞欠。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓仪或,卻偏偏與公主長得像痘煤,于是被迫代替她去往敵國和親哩治。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一種元程序中的元素關(guān)聯(lián)任何信息和...
    九尾喵的薛定諤閱讀 3,166評論 0 2
  • 從JDK5開始艾猜,Java增加了Annotation(注解)买喧,Annotation是代碼里的特殊標(biāo)記,這些標(biāo)記可以在...
    CarlosLynn閱讀 561評論 0 2
  • 轉(zhuǎn)載自:http://www.cnblogs.com/peida/archive/2013/04/23/30360...
    TTTqiu閱讀 338評論 0 0
  • 本篇文章講述Java中注解的相關(guān)知識匆赃。從Java中內(nèi)置的注解淤毛,到自定義注解,最后再介紹如何使用注解算柳。 一低淡、元素?fù)?jù) ...
    Android進(jìn)階與總結(jié)閱讀 408評論 0 2
  • 一直有種感覺, 你像只小貓埠居, 有萌萌的外表查牌,讓人總想去捏兩下事期; 有尖牙和利爪滥壕,把自己保護(hù)起來; 有豐富的好奇心兽泣,喜...
    管你要不哼閱讀 226評論 1 1