我有一个包含~90个字段的Java类。我希望能够对每个字段(例如生成一个XML元素)执行操作,而无需编写相同的5行代码,并进行90次轻微替换。在Objective C中,我认为您可以通过类似于访问Dictionary元素(ObjectForKey)的方式获取实例变量。 Java中有类似的东西,我可以得到一个字段数组,然后对它们各自做一些事情吗?
答案 0 :(得分:5)
是的,它被称为Reflection API。
特别是,MyClass.class.getDeclaredFields()
将返回此类声明的完整列表(see API for details)
答案 1 :(得分:1)
这是另一种方法:将Introspector API与JDK一起使用以获取类的类bean属性。如果您的班级有getter和setter并且不想直接访问私有字段,这将非常有用。 通过Introspector获取BeanInfo并从中获取所有propertyDescriptors。找到那个属性的吸气剂。
我不得不承认,使用这个API有点麻烦,反思(Nikita Rybak建议)更直接。
但是有一个实用程序Apache BeanUtils可以在内部完成所有的工作,因此使用bean变得简单。
添加:
如果您使用的是反射API,我建议您使用自定义注释来注释bean字段或getter。
public class MyClassWith90Fields {
@XmlSerialize("name")
private String screenName; // shoudl serialize as <name>...</name>
@XmlSerialize
private String email; // shoud serialize as <email>...</email>
@XmlSerializeIgnore
pirvate boolean flag; // shoud not serialize as annotated as ignore
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @annotation XmlSerialize {
public String value;
}
完成后,您的生成代码可以检查(使用反射)带注释的字段并将它们适当地序列化为XML。