首先定义一个注解:
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String name() default "defaultValue"; // 默认值
}
定义一个类,使用注解:
@MyAnnotation(name = "I am A class")
public class A {
@MyAnnotation(name = "I am a field") //注解里使用了默认值可不填参数
public String n;
@MyAnnotation(name = "I am a method")
public void testMethod() {
System.out.println("testMethod");
}
}
测试:
@Test
public void test7() throws NoSuchFieldException, NoSuchMethodException {
Class<A> c = A.class;
// 获取类上的注解
MyAnnotation a1 = c.getAnnotation(MyAnnotation.class);
System.out.println(a1.name());
Field n = c.getField("n");
// 获取字段上的注解
MyAnnotation a2 = n.getAnnotation(MyAnnotation.class);
System.out.println(a2.name());
Method method = c.getMethod("testMethod");
//获取方法上的注解
MyAnnotation a3 = method.getAnnotation(MyAnnotation.class);
System.out.println(a3.name());
}
输出:
I am A class
I am a field
I am a method