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

Java 使用泛型而不强制转换来限制传递给参数的类的类型,java,generics,Java,Generics,让我们假设我有一个实现,它能够将特定格式的字符串转换为指定类的对象 public interface Translator { <T> T convertToObject(Class<T> clazz, String msg); } 公共接口转换器{ T convertToObject(类clazz,字符串msg); } 我有一个类使用它,如下所示: public <T> T proccessMessage(Class<? extends R

让我们假设我有一个实现,它能够将特定格式的字符串转换为指定类的对象

public interface Translator {
    <T> T convertToObject(Class<T> clazz, String msg);
}
公共接口转换器{
T convertToObject(类clazz,字符串msg);
}
我有一个类使用它,如下所示:

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

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

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

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

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

T PROCESSMESSAGE(Class对于作为参数传递给translator的类和返回的类型,必须使用相同的类型,因为接口中是这样定义的:

public <T extends Response> T proccessMessage(Class<T> responseCls,String msg) {
    return translator.convertToObject(responseCls, msg); 
}
public T进程消息(类响应、字符串消息){
返回translator.convertToObject(responseCls,msg);
}

对于作为参数传递给translator的类和返回的类型,必须使用相同的类型,因为接口中是这样定义的:

public <T extends Response> T proccessMessage(Class<T> responseCls,String msg) {
    return translator.convertToObject(responseCls, msg); 
}
public T进程消息(类响应、字符串消息){
返回translator.convertToObject(responseCls,msg);
}

您不能使用类型参数进行强制转换,因为come runtime JVM不知道类型参数。您不能使用类型参数进行强制转换,因为come runtime JVM不知道类型参数。