程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 深入注解:在Java中設計和使用自己的注解

深入注解:在Java中設計和使用自己的注解

編輯:關於JAVA

我們用過JDK給我們提供的 @Override @Deprecated @SuppressWarning 注解 ,這些注解是JDK給我們提供的,我們只是在用別人寫好的東西,那麼我們是否可以自己寫注解呢?當然是可以的。

我們寫的注解包括三個環節:

1、 注解的聲明,也就是注解類的定義。

形式如下 @interface 來進行注解的聲明。

  1. package me.test;
  2. import Java.lang.annotation.* ;//導入注解包中所有注解
  3. @Retention(RetentionPolicy.RUNTIME) //解釋如下
  4. @Target(ElementType.TYPE)//解釋如下
  5. public @interface MyAnnotation
  6. {
  7. }
  8. @Retention(RetentionPolicy.RUNTIME)

指定了注解保留的周期,注解的生命周期有是三個,RetentionPolicy 枚舉的三個值代表了三個聲明周期,默認是CLASS。

枚舉常量摘要 CLASS
編譯器將把注釋記錄在類文件中,但在運行時 VM 不需要保留注釋。 RUNTIME
編譯器將把注釋記錄在類文件中,在運行時 VM 將保留注釋,因此可以反射性地讀取。 SOURCE
編譯器要丟棄的注釋。

@Target(ElementType.TYPE)

這個標識注解應該標在那裡ElementType的幾個枚舉值就代表了,注解應該寫在的位置。

CONSTRUCTOR
構造方法聲明 FIELD
字段聲明(包括枚舉常量) LOCAL_VARIABLE
局部變量聲明 METHOD
方法聲明 PACKAGE
包聲明 PARAMETER
參數聲明 TYPE
類、接口(包括注釋類型)或枚舉聲明

2、 使用了注解的類或者方法。

  1. @MyAnnotation
  2. class A
  3. {
  4. }

3、 利用反射來操作注解,詳細見代碼。

Class類有一個方法:

<A extends Annotation>
A
getAnnotation(Class<A> annotationClass)

這個方法接受一個注解的字節碼參數 ,然後返回這個類所標識的注解對象 ,因為我們標識了一個注解就相當於產生了一個注解對象 。

boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

這個方法判斷一個類是否被注解所標識。

下面是代碼示例:

MyAnnotationTest.Java中

  1. package me.test;
  2. import Java.lang.annotation.Annotation;
  3. @MyAnnotation
  4. public class MyAnnotationTest
  5. {
  6. public static void main(String []args)
  7. {
  8. if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))
  9. {
  10. MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;
  11. System.out.println(an.toString());
  12. }
  13. }
  14. }

MyAnnotation.Java中

  1. package me.test;
  2. import Java.lang.annotation.ElementType;
  3. import Java.lang.annotation.Retention;
  4. import Java.lang.annotation.RetentionPolicy;
  5. import Java.lang.annotation.Target;
  6. @Retention(RetentionPolicy.RUNTIME)
  7. @Target(ElementType.TYPE)
  8. public @interface MyAnnotation
  9. {
  10. }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved