这样增加的注释,如何加注释的属性
时间: 2024-03-03 08:46:59 浏览: 58
如果要在运行时使用反射机制为属性增加注解,可以使用 `Field` 类的 `getDeclaredAnnotations` 方法获取属性上的所有注解,然后通过 `Field` 类的 `setAnnotations` 方法将新的注解列表设置到属性上。
以下是一个示例代码,假设有一个 `Person` 类,包含 `name` 和 `age` 两个属性,现在需要使用注解的方式为 `age` 属性增加一个 `@MyAnnotation` 注解:
```java
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value();
}
public class Person {
private String name;
@MyAnnotation("Person Age")
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public static void main(String[] args) throws Exception {
Person person = new Person("Alice", 25);
Class<?> cls = person.getClass();
Field field = cls.getDeclaredField("age");
MyAnnotation newAnnotation = new MyAnnotation() {
public String value() {
return "New Person Age";
}
public Class<? extends java.lang.annotation.Annotation> annotationType() {
return MyAnnotation.class;
}
};
List<java.lang.annotation.Annotation> annotations = new ArrayList<>();
for (java.lang.annotation.Annotation annotation : field.getDeclaredAnnotations()) {
annotations.add(annotation);
}
annotations.add(newAnnotation);
java.lang.annotation.Annotation[] newAnnotations = annotations.toArray(new java.lang.annotation.Annotation[0]);
field.setAnnotations(newAnnotations);
MyAnnotation annotation = field.getAnnotation(MyAnnotation.class);
if (annotation != null) {
System.out.println(annotation.value());
}
}
}
```
运行该程序,输出结果为:
```
New Person Age
```
可以看到,首先使用 `Field` 类的 `getDeclaredAnnotations` 方法获取 `age` 属性上的所有注解,然后将新的 `@MyAnnotation` 注解加入到注解列表中。最后,使用 `Field` 类的 `setAnnotations` 方法将新的注解列表设置到属性上,从而为属性增加了新的注解。
需要注意的是,`setAnnotations` 方法会替换原有的注解列表,因此需要将原有的注解列表先保存到一个列表中,再将新的注解加入到列表中,最后再将新的注解列表设置到属性上。