在谈到大多数 Java-XML 数据绑定 API 中的对象编组时,有人说 XML 文件是从内存中的用户定义类重新创建的?我很困惑说(用户从内存中定义的类)。我知道在需要实现编组过程的情况下,使用反射将有助于获取类名和/或字段,但是如何访问数据(元素或属性的值)?
有没有人可以稍微解释一下这个过程?
谢谢
在谈到大多数 Java-XML 数据绑定 API 中的对象编组时,有人说 XML 文件是从内存中的用户定义类重新创建的?我很困惑说(用户从内存中定义的类)。我知道在需要实现编组过程的情况下,使用反射将有助于获取类名和/或字段,但是如何访问数据(元素或属性的值)?
有没有人可以稍微解释一下这个过程?
谢谢
您可以使用反射访问它们。例如,反射不仅返回名称,还返回字段所包含的值。
可以使用以下代码获得一个简单的示例:
import java.lang.reflect.Field;
public class ReflectionTest {
public static void main(final String[] args) throws Exception {
Object obj = new Person("Person Name", 20);
for (Field f : obj.getClass().getDeclaredFields()) {
f.setAccessible(true);
System.out.println(f.getName() + " = " + f.get(obj));
}
}
public static class Person {
private final String name;
private final int age;
public Person(final String name, final int age) {
super();
this.name = name;
this.age = age;
}
}
}
此代码将打印出:
name = Person Name
age = 20
如您所见,每个字段的值都是使用 method 访问的Field.get(Object)
。你可以在这里找到更多。
编组对象引用的数据也必须是可编组的。
例如,请参阅XmlAttribute javadoc:在某些情况下,引用数据必须是简单类型(String、float、...)或编组上下文已知的类。
字段值也是如此,您可以使用反射轻松读取它们的值:此示例读取MyObject.someField
字段值。
Class aClass = MyObject.class
Field field = aClass.getField("someField");
MyObject objectInstance = new MyObject();
Object value = field.get(objectInstance);