1 、有成员的Annotation必须要传参,或者默认参数,或者使用时候传参
2、 切记要想能获得注解的值,这个注解使用范围必须到 @Retention(RetentionPolicy.RUNTIME)
自定义注解:
package day8yue3;
//自定义注解
import java.lang.annotation.*;
//这个注解可以在运行时获得信息
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTag {
String name() default "xiaoming";
int age() default 30 ;
}
使用注解:
package day8yue3;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.*;
public class TestTag {
public static void main(String[] args)
{
try {
Class c = Class.forName("day8yue3.TestTag");
Method m = c.getMethod("info");
Annotation[] an = m.getAnnotations();
for(Annotation a :an){
//因为取出的是Annotation 类型,只是一个接口,要取出具体注解的成员,要强制转换
if(a instanceof MyTag)
{
System.out.println(((MyTag)a).age());
System.out.println(((MyTag)a).name());
//System.out.println(((MyTag)a).method1());
}
}
} catch (Exception e) {
System.out.println("没找到类");
}
}
@MyTag(age = 70,name = "new")
public void info()
{
}
}