在Java中设计和使用自己的注解(转载)
我們用過JDK給我們提供的 @Override @Deprecated @SuppressWarning 注解 ,這些注解是JDK給我們提供的,我們只是在用別人寫好的東西,那么我們是否可以自己寫注解呢?當(dāng)然是可以的。
我們寫的注解包括三個環(huán)節(jié):
1、 注解的聲明,也就是注解類的定義。
形式如下 @interface 來進行注解的聲明。
package?me.test;??? ?
?
import?java.lang.annotation.*?;//導(dǎo)入注解包中所有注解 ?
?
@Retention(RetentionPolicy.RUNTIME)???//解釋如下 ?
?
@Target(ElementType.TYPE)//解釋如下 ?
?
public?@interface?MyAnnotation????????????? ?
{? ?
?
} ?
?
@Retention(RetentionPolicy.RUNTIME)??
指定了注解保留的周期,注解的生命周期有是三個,RetentionPolicy 枚舉的三個值代表了三個聲明周期,默認(rèn)是CLASS。
枚舉常量摘要CLASS
????????? 編譯器將把注釋記錄在類文件中,但在運行時 VM 不需要保留注釋。RUNTIME
????????? 編譯器將把注釋記錄在類文件中,在運行時 VM 將保留注釋,因此可以反射性地讀取。SOURCE
????????? 編譯器要丟棄的注釋。
@Target(ElementType.TYPE)
這個標(biāo)識注解應(yīng)該標(biāo)在那里ElementType的幾個枚舉值就代表了,注解應(yīng)該寫在的位置。
CONSTRUCTOR
????????? 構(gòu)造方法聲明FIELD
????????? 字段聲明(包括枚舉常量)LOCAL_VARIABLE
????????? 局部變量聲明METHOD
????????? 方法聲明PACKAGE
????????? 包聲明PARAMETER
????????? 參數(shù)聲明TYPE
????????? 類、接口(包括注釋類型)或枚舉聲明
2、 使用了注解的類或者方法。
@MyAnnotation?
class??A ?
{ ?
}?
3、 利用反射來操作注解,詳細(xì)見代碼。
Class類有一個方法:
<A extends?Annotation>?
A???getAnnotation(Class<A> annotationClass)
這個方法接受一個注解的字節(jié)碼參數(shù) ,然后返回這個類所標(biāo)識的注解對象 ,因為我們標(biāo)識了一個注解就相當(dāng)于產(chǎn)生了一個注解對象 。
booleanisAnnotationPresent(Class<? extends?Annotation> annotationClass)
這個方法判斷一個類是否被注解所標(biāo)識。
下面是代碼示例:
MyAnnotationTest.java中
package?me.test; ?
import?java.lang.annotation.Annotation; ?
@MyAnnotation?
public?class?MyAnnotationTest ?
{? ?
?
????public?static?void?main(String?[]args) ?
????{ ?
?????if(MyAnnotationTest.class.isAnnotationPresent(?MyAnnotation.class)) ?
?????{ ?
???????MyAnnotation?an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class)?; ?
???????System.out.println(an.toString()); ?
?????} ?
????} ?
}?
MyAnnotation.java中
package?me.test; ?
import?java.lang.annotation.ElementType; ?
import?java.lang.annotation.Retention; ?
import?java.lang.annotation.RetentionPolicy; ?
import?java.lang.annotation.Target; ?
@Retention(RetentionPolicy.RUNTIME) ?
@Target(ElementType.TYPE) ?
public?@interface?MyAnnotation ?
{? ?
?
}?
總結(jié)
以上是生活随笔為你收集整理的在Java中设计和使用自己的注解(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA语言中的反射机制
- 下一篇: java美元兑换,(Java实现) 美元