使用Cast和泛型实现通用方法

时间:2014-10-01 18:00:57

标签: java generics jaxb

我看了帖子: - Very simple Java Dynamic Casting - java: how can i do dynamic casting of a variable from one type to another?

但它并没有完全回答我的要求。 我需要创建一个方法,从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;
}

我想改变这种方法。我需要/希望通过参数'响应'传递一个Class。并且我的代码必须实例化这个类[JAXBContext.newInstance(Response);]并解组并返回unmarshalled类 - 这是在Response中作为参数传递的类 - 给调用者。

编写方式我只能使用SaiRenovacao课程。

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

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

1 个答案:

答案 0 :(得分:1)

尝试类似

的内容
return clazz.cast(temp);

将您的方法签名更改为

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