代码之家  ›  专栏  ›  技术社区  ›  Dave Novelli

Java反射——从一个对象中获得一个类型来实例化一个泛型

  •  0
  • Dave Novelli  · 技术社区  · 15 年前

    我以前从来没有真正使用过反射,我正在尝试一些我不确定是否可行的东西。基本上,我尝试编写一个方法,将对象作为参数,然后尝试封送该对象,而不管其类型如何。我不知道如何在实例化通用JAXBRelement对象时使用该类型。这有可能吗?有什么想法吗?我的尝试如下:

    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();
    }
    
    4 回复  |  直到 7 年前
        1
  •  0
  •   matt b    15 年前

    JAXBElement JAXBElement<String> JAXBElement<Foo>

        2
  •  2
  •   Tom Anderson    15 年前

    <T> String marshalObject(T obj) {
    

    Class<T> c = obj.getClass(); // something like that
    

    JAXBElement<T> jaxElement = new JAXBElement<T>(_QNAME, c, null, obj);
    
        3
  •  0
  •   Alex G    11 年前

    private static <T> JAXBElement<T> makeQName(Object obj) {
        Class c = obj.getClass();
        QName qName = new QName("com.ukrcard.xmlMock", obj.getClass().getName());
        return new JAXBElement<T>(qName, c, (T) obj);
    }
    
        4
  •  0
  •   m.nguyencntt    7 年前

    public static <T> JAXBElement<T> createJaxbElement(T object, Class<T> clazz) {
        return new JAXBElement<>(new QName(clazz.getSimpleName()), clazz, object);
    }