枚举Java字段

时间:2010-09-15 00:58:50

标签: java

我有一个包含~90个字段的Java类。我希望能够对每个字段(例如生成一个XML元素)执行操作,而无需编写相同的5行代码,并进行90次轻微替换。在Objective C中,我认为您可以通过类似于访问Dictionary元素(ObjectForKey)的方式获取实例变量。 Java中有类似的东西,我可以得到一个字段数组,然后对它们各自做一些事情吗?

2 个答案:

答案 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。