例如:为什么不:
Foo结果=mapper. readValue
而不是
Foo结果=mapper. readValue(jsonStr,Foo.class);
阻止Java泛型使用它的限制是什么?
限制是无法从类型变量
中选择。所以你不能调用T. class
来获取下一个方法所需的T的类对象。
看一下实现
public <T> T readValue(String content, Class<T> valueType)
throws IOException, JsonParseException, JsonMappingException
{
return (T) _readMapAndClose(_jsonFactory.createParser(content), _typeFactory.constructType(valueType));
}
public JavaType constructType(Type type) {
return _fromAny(null, type, EMPTY_BINDINGS);
}
他们需要将value eType
传递给
_typeFactory.constructType(valueType)
这对于泛型来说是不可能的。
我尝试了以下方法
private <T> T readValue(String content)
{
return constructType(T.class);
}
private JavaType constructType(Type type)
{
//construct type somehow
}
这无法编译。它说无法从T上的类型变量
中进行选择(第3行)。现在使用Class参数:
private <T> T readValue(String content, Class<T> clazz)
{
return constructType(clazz);
}
private JavaType constructType(Type type)
{
//construct type somehow
}
这将成功编译。
如何从泛型类型参数中获取“. class”属性?