注解(也被稱為元數(shù)據(jù))為我們在代碼中添加信息提供了一種形式化的方法挠他,使我們可以在稍后某個(gè)時(shí)刻非常方便的使用這些數(shù)據(jù)敢茁。
一、定義注解
注解的定義看起來很像接口的定義耗拓。事實(shí)上拇颅,與其他任何Java接口一樣,注解也將會(huì)編譯成class文件帆离。
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test() ///;~
除了@符號外蔬蕊,@Test的定義很像一個(gè)空的接口。定義注解時(shí)哥谷,會(huì)需要一些元注解(meta-annotation),如@Target和@Retention岸夯。@Target用來定義你的注解將應(yīng)用于什么地方(例如是一個(gè)方法或者一個(gè)域)。@Retention用來定義該注解在哪一個(gè)級別可用们妥,在源代碼中(SOURCE)猜扮、類文件中(CLASS)或者運(yùn)行時(shí)(RUNTIME)。
在注解中监婶,一般都會(huì)包含一些元素以表示某些值旅赢。當(dāng)分析處理注解時(shí),程序或工具可用利用這些值惑惶。注解的元素看起來就像接口的方法煮盼,唯一的區(qū)別是你可以為其指定默認(rèn)值。
沒有元素的注解稱為標(biāo)記注解(mark annotation)带污。
二僵控、元注解
Java目前內(nèi)置了三種標(biāo)準(zhǔn)注解以及四種元注解。元注解zhuan'zhi專職負(fù)責(zé)注解其他的注解鱼冀。
注解 | 含義 |
---|---|
@Target | 表示該注解可以用于什么地方报破,可能的ElementType參數(shù)包括:CONSTRUCTOR(構(gòu)造器聲明),F(xiàn)IELD(域聲明)千绪,LOCAL_VARIABLE(局部變量聲明)充易,METHOD(方法聲明),PACKAGE(包聲明)荸型,PARAMETER(參數(shù)聲明)盹靴,TYPE(類、接口或enum聲明) |
@Retention | 表示需要在什么級別保存該注解信息瑞妇,可選的RetentionType包括:SOURCE,CLASS,RUNTIME |
@Documented | 將此注解包含在Javadoc中 |
@Inherited | 允許子類繼承父類中的注解 |
大多數(shù)時(shí)候鹉究,我們主要是定義自己的注解,并編寫自己的處理器來處理他們踪宠。
三自赔、總結(jié)
注解是java引入的一項(xiàng)非常受歡迎的補(bǔ)充。它提供了一種結(jié)構(gòu)化的柳琢,并且具有類型檢查能力的新途徑绍妨,從而使得程序員能夠wei為代碼加入元數(shù)據(jù),而不會(huì)導(dǎo)致代碼雜亂且難以閱讀柬脸。使用注解能夠幫助我們避免編寫累贅的部署描述文件他去,以及其他生產(chǎn)的文件。而Javadoc中的@deprecated被@Deprecated注解取代的事實(shí)也說明倒堕,與注釋性文字相比灾测,注解絕對更適合用于描述類相關(guān)的信息。