一、自定義註解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 21spa