我有以下代码将xml解组为Java对象。我想看看是否可以通过使用Java Generics而不是使用Object类型作为返回值来增强此代码。
protected static <T> Object unmarshall(String xml, Class<T> clazz)
throws JAXBException {
JAXBContext jc = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Object obj = unmarshaller.unmarshal(new StringReader(xml));
return obj;
}
任何建议。
答案 0 :(得分:7)
是的,您可以稍微增强您的代码:
protected static <T> T unmarshall(String xml, Class<T> clazz)
throws JAXBException {
JAXBContext jc = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = jc.createUnmarshaller();
T obj = clazz.cast(unmarshaller.unmarshal(new StringReader(xml)));
return obj;
}
答案 1 :(得分:3)
如果您不需要重用JAXBContext,则无需创建它。有一种方便的方法(几乎)有你想要的方法签名。它抛出一个declare @Bin varbinary(max) = convert(varbinary(max), 'My binary value')
select concat('varbinary value is: ', cast(@Bin as varchar(max)))
(很多人更喜欢)。
RuntimeException
但是imo,只需在没有包装器的情况下直接使用该方法。
从长远来看,重用JAXBContext会使(联合国)编组更快。另一个改进是clazz.cast(),以避免令人讨厌的未经检查的演员
protected static <T> T unmarshall(String xml, Class<T> clazz) {
return JAXB.unmarshal(new StringReader(xml), clazz);
}