Rag*_*eer 2 java generics casting java-8
我有很多响应对象需要提供给 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;
}
Run Code Online (Sandbox Code Playgroud)
T可不行Object。例如,可能是BaseEndpoint因为它满足条件T extends Object。
您需要将结果转换mapper.readValue(file, clazz)为T:
result = (T)mapper.readValue(file, clazz);
Run Code Online (Sandbox Code Playgroud)
@SuppressWarnings("unchecked")如果您确定这个未经检查的演员表是准确的,请提交该方法:
@SuppressWarnings("unchecked")
private <T> T getResult(Class clazz) { ... }
Run Code Online (Sandbox Code Playgroud)
实际上,可以在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));
}
Run Code Online (Sandbox Code Playgroud)
这一切都会为你完成。您只需要传递一个正确的Class<T>实例(而不是原始类型Class)