0

假设我有一个实现,能够将某种格式的字符串转换为指定类的对象......

public interface Translator {
    <T> T convertToObject(Class<T> clazz, String msg);
}

我有一个使用它的类,如下所示:

public <T> T proccessMessage(Class<? extends Response> responseCls,String msg) {
    return (T) translator.convertToObject(responseCls, msg); 
}

有没有办法做到这一点而不铸造?我的意图是将 processMessage 限制为仅接受 Response 类型。响应类型是标记接口。谢谢!

4

2 回答 2

3

对于作为参数传递给翻译器的类和返回的类型,您必须使用相同的类型,因为它是在接口中定义的:

public <T extends Response> T proccessMessage(Class<T> responseCls,String msg) {
    return translator.convertToObject(responseCls, msg); 
}
于 2012-08-09T17:09:41.767 回答
2

由于您将类参数限制为 的子类Response,我相信您的方法签名应该如下所示:

public <T extends Response>
    T proccessMessage(Class<? extends T> responseCls, String msg)
{
    return translator.convertToObject(responseCls, msg);
}

通过这种方式,您可以获得正确的返回类型,并且无需类型转换即可编译。

于 2012-08-09T17:07:41.793 回答