假设我有一个能够将某种格式的字符串转换为指定类的对象的实现...
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类型。响应类型是标记接口。谢谢!
答案 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);
}
通过这种方式,您可以获得正确的返回类型,并且无需类型转换即可编译。