獲取註解信息

一、自定義註解java

package com.ljb.app.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 自定義代成員註解
 * 能夠修飾類、方法,保存到運行時,在javadoc中生成文檔,子類繼承
 * @author LJB
 * @version 2015年3月4日
 */
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
 // 有默認值
 String name() default "張三";
 
 // 不帶默認值
 int age();
}

二、建立獲取註解信息類app

package com.ljb.app.annotation;
import java.lang.annotation.Annotation;
/**
 * 獲取成員註解信息
 * @author LJB
 * @version 2015年3月5日
 */
public class AnnotationInfo {
 /**
  * @param args
  */
 public static void main(String[] args) {
  AnnotationInfo annInfo = new AnnotationInfo();
  try {
   annInfo.getInfo();
  } catch (SecurityException e) {
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   e.printStackTrace();
  }
 }
 
 @MyAnnotation(age=21)
 public void getInfo () throws SecurityException, NoSuchMethodException {
  // 獲取方法註解
  @MyAnnotation(age=22)
  Annotation[] annos = AnnotationInfo.class.getMethod("getInfo").getAnnotations();
  
  // 遍歷
  for (Annotation ann:annos) {
   // 判斷註解類型
   if (ann instanceof MyAnnotation) {
    System.out.println("ann is " + ann);
    System.out.println("ann.name() is " + ((MyAnnotation)ann).name());
    System.out.println("ann.age() is " + ((MyAnnotation)ann).age());
   }
  }
 }
}

運行結果:ann is @com.ljb.app.annotation.MyAnnotation(name=張三, age=21)
ann.name() is 張三
ann.age() is 21
spa

相關文章
相關標籤/搜索