[英]Java Generics : Cannot convert from Object to T
我有很多需要给ui的响应对象。 我想要一个模板,以便可以执行此操作,到目前为止,下面的代码无效。
private <T> T getResult(Class clazz){
String fileName = "/path/file.json";
File file = new File(BaseEndpoint.class.getResource(fileName.getFile());
T result = null;
try {
result = mapper.readValue(file, clazz);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
T
不能是Object
。 例如,它可能是BaseEndpoint
因为它满足T extends Object
的条件。
您需要将mapper.readValue(file, clazz)
的结果mapper.readValue(file, clazz)
为T
:
result = (T)mapper.readValue(file, clazz);
如果您确定此未经检查的转换正确无误,则将@SuppressWarnings("unchecked")
放在方法上:
@SuppressWarnings("unchecked")
private <T> T getResult(Class clazz) { ... }
实际上,可以在readValue
方法中为您完成readValue
(如果它使用Class<T>
),因此您不需要任何上述操作。
是的,我已经检查了一下:
@SuppressWarnings("unchecked")
public <T> T readValue(JsonParser p, Class<T> valueType)
throws IOException, JsonParseException, JsonMappingException
{
DeserializationContext ctxt = createDeserializationContext(p);
return (T) _readValue(ctxt, p, _typeFactory.constructType(valueType));
}
一切都会为您完成。 您只需要传递正确的Class<T>
实例(而不是原始类型Class
)
您不能将对象类型分配给T型变量。 您必须将其显式转换为T类型。您应该使用以下代码:
result = (T) mapper.readValue(file, clazz);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.