假设我有很多类,这些类是使用Java反射构建的(出于某种原因)。现在我需要向那些用
我的问题是:使用反射快速设置字段的方法是什么?
请记住,我需要在许多类上经常执行此操作,因此性能很重要。
按直觉我会写出以下伪代码:
如果我从一开始就知道某个字段,我能否获取该字段?
注意:我不能让类实现某个接口,以便使用方法设置字段。我需要POJOs。
注意2:为什么我想要后置字段注入:从API用户的角度来看,必须能够使用final字段。此外,当API事先不知道字段的类型和数量时,无法使用接口进行字段初始化。
注意2b:从用户的角度来看,最终合同没有被破坏。它保持不变。首先,一个字段被初始化,然后就不能更改了。顺便说一下:有很多API使用这个概念,其中一个是JAXB(JDK的一部分)。
@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);
如果我从一开始就知道某个字段,我能否获取该字段?
注意:我不能让类实现某个接口,以便使用方法设置字段。我需要POJOs。
注意2:为什么我想要后置字段注入:从API用户的角度来看,必须能够使用final字段。此外,当API事先不知道字段的类型和数量时,无法使用接口进行字段初始化。
注意2b:从用户的角度来看,最终合同没有被破坏。它保持不变。首先,一个字段被初始化,然后就不能更改了。顺便说一下:有很多API使用这个概念,其中一个是JAXB(JDK的一部分)。