注解关键字[b]@interface[/b]
修饰注解的注解:
@Retention ,保持机制,保持策略有RUNTIME,CLASS,SOURCE。
@Target,限定注解生效的对象范围,使用ElementType枚举,值如下:
2.处理方法,从类到属性到方法,根据自己的定义的来处理
修饰注解的注解:
@Retention ,保持机制,保持策略有RUNTIME,CLASS,SOURCE。
@Target,限定注解生效的对象范围,使用ElementType枚举,值如下:
public enum ElementType{
TYPE; //适用class,interface,enum
FIELD; //适用field;
METHOD; //适用method
PARAMETER, //适用method上之parameter
CONSTRUCTOR, //适用constructor
LOCAL_VARIABLE, //适用局部变量
ANNOTATION_TYPE, //适用annotation型态
package //适用package
}
2.处理方法,从类到属性到方法,根据自己的定义的来处理
以下是一个处理的示例,AnTest类分别使用了我自定义的注解分别注解了类,属性和方法,分别对应注解TestClass,TestField,Test
AnTest antest=new AnTest();
Class myclass=antest.getClass();
//判断类
if(myclass.isAnnotationPresent(TestClass.class))
{
System.out.print("此类是TestClass注解的类:"+myclass.getName());
TestClass testClass=(TestClass) myclass.getAnnotation(TestClass.class);
System.out.println(",注解值:"+testClass.value());
}
//判断属性
Field[] fields=myclass.getDeclaredFields();
if(fields.length==0){
System.out.println("此类没有属性");
}else{
for(Field field:fields){
if(field.isAnnotationPresent(TestField.class)){
System.out.print("被注解的属性:"+field.getName());
TestField testField=field.getAnnotation(TestField.class);
System.out.println(",注解值:"+testField.value());
}
}
}
//判断方法
Method[] methods=myclass.getDeclaredMethods();
if(methods.length==0){
System.out.println("此类没有方法");
}
else{
for(Method method:methods)
{
if(method.isAnnotationPresent(Test.class))
{
System.out.print("被注解的方法名:"+method.getName());
Test test=method.getAnnotation(Test.class);
System.out.println(",注解值:"+test.value());
}
}
}