我正在审查反思的工作方式或可能的工作方式。我有这个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
并将字段/属性从@TargetAnnotaton
to分配给Target
。
public class TargetProcessor {
public void parse() {
// look into `@TargetAnnotation`
// map `@TargetAnnotation` properties to `Target`
}
}