我以前从未真正使用过反射,并且正在尝试一些我不确定是否可行的事情。基本上,我正在尝试编写一个采用 Object
的方法。作为参数,然后尝试编码(marshal)该对象,无论其类型如何。我不知道在实例化通用 JAXBElement<T>
时如何获取要使用的类型目的。这可能吗?我的尝试:
String marshalObject(Object obj) {
Class c = obj.getClass();
Type t = (Type) c;
QName _QNAME = new QName("http://www.acme.com/ImportExport", c.getName());
StringWriter sw = new StringWriter();
try {
ObjectFactory of = new ObjectFactory();
JAXBElement<?> jaxElement = new JAXBElement<t>(_QNAME, c, null, obj);
JAXBContext context = JAXBContext.newInstance( c );
Marshaller m = context.createMarshaller();
m.marshal( jaxElement, sw );
} catch( JAXBException jbe ){
System.out.println("Error marshalling object: " + jbe.toString());
return null;
}
return sw.toString();
}
最佳答案
官方泛型 Nerd 的方法是在方法上粘贴一个类型参数。您声明它:
<T> String marshalObject(T obj) {
然后当你上课时:
Class<T> c = obj.getClass(); // something like that
最后:
JAXBElement<T> jaxElement = new JAXBElement<T>(_QNAME, c, null, obj);
关于Java Reflection - 从对象获取类型以实例化泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125221/