本文共 2188 字,大约阅读时间需要 7 分钟。
注解定义为:
public @interface AnnotationName{}
使用注解
@ AnnotationNamepublic void func(){}
@Retention:保留的阶段。
@Target:注解修饰的目标,可以说类,方法,成员变量,包。 @Documented:是否被javadoc提取成文的。 @Inherited:注解是否能继承。注解的成员变量定义:
public @interface AnnotationName{ String name() default "abc"; int age() default 33; boolean flag();}
其中default修饰的表示默认值。
定义注解类
import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Testable { boolean isSkiped() default false; String name();}
被注解修饰的类
public class Foo { public static void m1() { System.out.println("I am m1"); } @Testable(isSkiped = false, name = "methond2") public static void m2() { System.out.println("I am m2"); } @Testable(name = "methond3") public static void m3() { System.out.println("I am m3"); } @Testable(isSkiped = true, name = "methond4") public static void m4() { System.out.println("I am m4"); }}
处理注解的工具类
import java.lang.reflect.*;public class TestAnnotation { public static void main(String[] args) throws SecurityException, ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { for (Method m : Class.forName("Foo").getMethods()) { if (m.isAnnotationPresent(Testable.class)) { System.out.print(m.getName() + " is Annotation element, so invoke result is: "); m.invoke(null); } else { System.out.println(m.getName() + " is not Annotation element"); } } }}
输出:
m1 is not Annotation elementm2 is Annotation element, so invoke result is: I am m2m3 is Annotation element, so invoke result is: I am m3m4 is Annotation element, so invoke result is: I am m4wait is not Annotation elementwait is not Annotation elementwait is not Annotation elementequals is not Annotation elementtoString is not Annotation elementhashCode is not Annotation elementgetClass is not Annotation elementnotify is not Annotation elementnotifyAll is not Annotation element
转载地址:http://pvhrb.baihongyu.com/