【发布时间】:2018-03-27 16:54:16
【问题描述】:
我正在审查反射的工作方式或可能的工作方式。我有这个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 接口的情况下做到这一点?
假设我在SomeClassBuilder 之前调用了这个TargetProcessor,其唯一目的是填写带有@TargetAnnotation 注释的target : Target,并将@TargetAnnotaton 中的字段/属性分配给Target。
public class TargetProcessor {
public void parse() {
// look into `@TargetAnnotation`
// map `@TargetAnnotation` properties to `Target`
}
}
【问题讨论】:
-
如果我理解这一点,你会得到一个字段,上面有一个注释,定义了该字段的值,对吧?
-
@CodeMatrix,是的。请查看更新内容。
-
您可以使用
Processor或通过工厂方法创建实例。后面我可以举个例子。
标签: java reflection annotations java-annotations