我正在审查反思的工作方式或可能的工作方式。我有这个SomeClassBuilder,其中它有一个target : Target带有声明注释的属性TargetAnnotation。
问题是,是否可以Target在调用时覆盖/更新其中的值/属性someMethod()将返回注释上的参数?
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TargetAnnotation {
String first();
String second();
// other attributes
}
public class Target {
String first;
String second;
// some other attributes unique only to `Target`
}
public interface TargetHelper {
void setTarget(Target target);
}
public class SomeClassBuilder implements TargetHelper {
@TargetAnnotation(first = "first", second = "second")
private Target target;
@Override public void setTarget(Target target) { this.target = target }
public void someMethod() {
System.out.println(target.first); // should be `first`
System.out.println(target.second); // should be `second`
}
}
或者甚至可以在没有TargetHelper接口的情况下做到这一点?
假设我TargetProcessor之前调用了这个SomeClassBuilder,唯一的目的是填写target : Target注释@TargetAnnotation并将字段/属性从@TargetAnnotatonto分配给Target。
public class TargetProcessor {
public void parse() {
// look into `@TargetAnnotation`
// map `@TargetAnnotation` properties to `Target`
}
}