使用泛型限制传递给参数的类的类型而不进行强制转换

时间:2012-08-09 16:59:35

标签: java generics

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

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类型。响应类型是标记接口。谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

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