假设,我有很多类,它们是使用 Java 反射构造的(出于某种原因)。现在我需要将值后注入到字段中,这些字段用@PostInject
.
public class SomeClass {
@PostInject
private final String someString = null;
public void someMethod() {
// here, someString has a value.
}
}
我的问题是:使用反射设置字段的快速方法是什么?
请记住,我需要在很多课程上经常这样做,这就是为什么性能是相关的。
这个伪代码显示了我会凭直觉做什么:
- 获取类的所有字段
clazz.getFields();
- 检查,用 @PostInject 注释
eachField.getAnnotation(PostInject.class);
- 使这些字段可访问
eachAnnotatedField.setAccessible(true);
- 将它们设置为某个值
eachAnnotatedField.set(clazz, someValue);
恐怕获得所有领域是最慢的事情。
当我从一开始就知道时,我可以得到一个领域吗?
注意:我不能只让类实现一些接口,这将允许使用方法设置字段。我需要POJO。
NOTE2:为什么我想要后字段注入:从 API 用户的角度来看,必须可以使用 final 字段。此外,当API先验不知道字段的类型和数量时,不可能使用接口来实现字段初始化。
NOTE2b:从用户的角度来看,最终的合同没有被破坏。它保持最终状态。首先,一个字段被初始化,然后它不能被改变。顺便说一句:有很多 API 使用这个概念,其中之一是 JAXB(JDK 的一部分)。