将非泛型方法转换为泛型方法

时间:2012-08-09 09:33:01

标签: java generics jaxb marshalling

我有以下方法:

private <U> void fun(U u) throws JAXBException {
    JAXBContext context = JAXBContext.newInstance(u.getClass());
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(u, System.out);
    }

marshal()方法采用不同类型的参数。见here 需要:

  1. 的ContentHandler
  2. 的OutputStream
  3. XMLEventWriter的
  4. XMLStreamWriter等。
  5. 如何修改上述方法,以便代替System.out,我可以在函数参数中传递编组的目的地。

    例如我想调用类似的方法:

    objToXml(obj1,System.out);
    outToXml(obj1,file_pointer);
    

    同样。

    我尝试使用fun(obj1,PrintStream.class,System.out)进行操作,但未成功:

    private <T, U, V> void fun(T t, Class<U> u, V v) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(t.getClass());
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(t, (U) v);
        }
    

1 个答案:

答案 0 :(得分:3)

您无需在方法中添加其他通用参数。只需将javax.xml.transform.Result传递给marshaller:

private <U> void fun(U u, Result result) {
  JAXBContext context = JAXBContext.newInstance(u.getClass());
  Marshaller marshaller = context.createMarshaller();
  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
  marshaller.marshal(u, result);
}

您可以使用StreamResult写入System.out或文件:

fun(foo, new StreamResult(System.out));
fun(foo, new StreamResult(file_pointer.openOutputStream()));