繁体   English   中英

Java泛型:无法从Object转换为T

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM