反射操作注解
注意:反射对象.getAnnotation(注解类)是获取当前对象的注解,
如果想要获得值可以:反射对象.getAnnoataion(注解类).value()------此处的value()就相当于注解的属性
package com.cw.demo01;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@MyInterface("我的自定义")
public class MyAnnotationRef {
@MyInterfaceTwo("wpde")
private Integer id;
public static void main(String[] args) throws NoSuchFieldException, ClassNotFoundException {
Class c1 = MyAnnotationRef.class;//反射获取类对象
Field id = c1.getDeclaredField("id");//获取类对象的属性
//获取属性的某个值,括号内就是某个值的注解类
MyInterfaceTwo annotation = id.getAnnotation(MyInterfaceTwo.class);
System.out.println(annotation.length());//获取注解的值
System.out.println(annotation.value());
//获取当前类的对象
MyInterface myann = (MyInterface) c1.getAnnotation(MyInterface.class);
//获取类对象的值
System.out.println(myann.value());
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface MyInterface {
String value();
}
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyInterfaceTwo {
String value() default "默认";
int length() default 10;
}