这是我的代码段,以及更新的" constructParameterizedType"并不符合我的需要(除非我遗漏了一些东西,我认为我是这样)。我有一个名为Result的泛化类,其中T是任何扩展我的" Inflatable"基类。表示从Salesforce REST API返回的数据记录...所以这里是有效的代码示例:
Class c = Class.forName("sfshare.UserRecord" );
JavaType type = mapper.getTypeFactory().constructParametricType(Result.class, c);
Result<T> res = mapper.readValue(rspData, type);
但是如果我使用较新的(不推荐的)&#34; constructParameterizedType()&#34;方法,这个相同的代码将不会编译,因为它不匹配constructParameterizedType的参数。但是constructParameterizedType还没有被使用,并且没有使用的例子......只有Javadoc - 这对我的用例没有意义。
答案 0 :(得分:4)
如果你看一下参数,特别是Javadocs,你会注意到有一个新类型:第二个参数是预期的&#39;目标&#39;用于参数。 举一个含义的例子是,如果你想构造等价的:
ArrayList<String>
您想要传递的参数是:
constructParameterizedType(ArrayList.class, List.class, String.class)
对于第二个参数,或者可能是Collection.class
。
可以将其视为您尝试为其提供参数的基础相关类型。
这种变化的根本原因有点复杂,并且与处理&#34;附加组件&#34;像Iterable<T>
这样的接口:对于这些情况,有必要提供不同的类。
但是在大多数最终用户用例中,您只需要传递与第一个和第二个参数相同的类。
答案 1 :(得分:3)
试试这个:
Class c = Class.forName("sfshare.UserRecord");
TypeFactory typeFactory = mapper.getTypeFactory();
JavaType type = typeFactory.constructParametrizedType(Result.class, Result.class, c);
Result<T> res = mapper.readValue(rspData, type);
或者您的Result<T>
类实现了接口:
JavaType type = typeFactory.constructParametrizedType(Result.class, ResultInterface.class, c);