自定义注解:
@Target(ElementType.FIELD) //只能书写在成员变量上
@Retention(RetentionPolicy.RUNTIME) //存活范围:源码阶段、 字节码阶段、 运行时
public @interface 注解名{
public String value();//属性
}
使用注解:
@注解名("给属性赋的值") //注解的特殊作用: 把value值,赋值给当前成员变量
private String 属性名;//成员变量
实现逻辑:
public void 方法名() throws NoSuchFieldException, InstantiationException, IllegalAccessException {
/*获取Class对象*/
Class<类名> 对象x = 类名.class;
类名 对象y= 对象x.newInstance();//类名指:上述使用注解的类
Field field = 对象x.getDeclaredField("属性名");//获取成员变量对象
/*判断:成员变量上是否有@Book注解*/
if(field.isAnnotationPresent(注解名.class)){
/*有注解:解析*/
注解名 注解对象z = field.getDeclaredAnnotation(注解名.class);
/*获取注解中的value属性值*/
String 名称1 = 注解对象z.value();
field.setAccessible(true);//私有成员变量,要取消权限检查,公有属性可以不需要这语句。
/*使用反射技术,给私有成员变量赋值*/
field.set( 对象y, 名称1);
}
}