使用强制转换和泛型实现泛型方法



我阅读了以下帖子:-非常简单的Java动态铸造-java:如何将变量从一种类型动态转换为另一种类型?

但它并没有完全回答我想要的。我需要创建一个方法,从String中的XML创建一个类。XSD已经创建,我成功地使用JAXB将XML编组/取消编组到Class并返回。但这太静态了。下面的代码是实际代码。


    public static SaiRenovacao createClassFromString(String string,
            Class Response) throws JAXBException {
        SaiRenovacao _return = null;

    StringReader reader = new StringReader(string);
    JAXBContext jaxbContext = JAXBContext.newInstance(Response);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    Object temp = unmarshaller.unmarshal(reader);
    _return = (SaiRenovacao) temp;
    return _return;
}

我想改变这个方法。我需要/想要通过参数"Response"传递一个Class,我的代码必须实例化这个Class[JAXBContext.newInstance(Response);]并对其进行解组,并将解组的类(即在Response中作为参数传递的类)返回给调用方。

按照它的写法,我只能和SaiRenovacao类一起工作。

如果我将实现更改为,我将得到一个明显的异常,因为我无法解析对类型的响应。但这是我需要做的基本想法


    public static SaiRenovacao createClassFromString(String retorno,
            Class Response) throws JAXBException {
        SaiRenovacao _retorno = null;

    StringReader reader = new StringReader(retorno);
    JAXBContext jaxbContext = JAXBContext.newInstance(Response);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    Object temp = unmarshaller.unmarshal(reader);
    _retorno = (Response) temp;
    return _retorno;
}

尝试类似的东西

return clazz.cast(temp);

并将您的方法签名更改为

public static <T> T createClassFromString(String retorno, Class<T> clazz) throws JAXBException {

最新更新