Java Reflection - 从对象获取类型以实例化泛型

标签 java generics reflection

我以前从未真正使用过反射,并且正在尝试一些我不确定是否可行的事情。基本上,我正在尝试编写一个采用 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/

相关文章:

java - 简单的 Java 客户端/服务器程序

java - 谷歌应用引擎上的速度框架

c++ - 如何将迭代器泛化为某种类型

java - ElementType.LOCAL_VARIABLE 注解类型

java - 如何将任何对象序列化为 URI?

java - 如何将switch语句中的条件返回到while?

java - JPA - 为 SINGLE_TABLE 层次结构抽象类的两个子类分配不同的唯一约束

oop - Kotlin 类型推断失败的原因

c# - List<T> 上的通用排序

java - 在 Java 反射中将 int 转换为 Enum