这是我的代码片段,较新的“constructParameterizedType”不符合我的需求(除非我遗漏了一些东西,我认为我是这样)。我有一个名为 Result 的通用类,其中 T 是扩展我的“充气”基类的任何基本类。表示从 Salesforce REST API 返回的数据记录......所以这里是工作的代码示例:
Class c = Class.forName("sfshare.UserRecord" );
JavaType type = mapper.getTypeFactory().constructParametricType(Result.class, c);
Result<T> res = mapper.readValue(rspData, type);
但是,如果我使用较新的(未弃用的)“constructParameterizedType()”方法,则相同的代码将无法编译,因为它与constructParameterizedType 的参数不匹配。但是constructParameterizedType 还没有太多使用,也没有可以使用的示例......只有Javadoc - 这对我的用例没有意义。
最佳答案
如果您查看参数,特别是 Javadocs,您会注意到有一种新类型:第二个参数是参数的预期“目标”。
举一个意义的例子是,如果你想构造等价于:
ArrayList<String>
你想作为参数传递的是:
constructParameterizedType(ArrayList.class, List.class, String.class)
或者,可能是
Collection.class
对于第二个论点。将其视为您尝试为其提供参数的基础相关类型。
这种变化的根本原因有些复杂,与处理“附加”接口(interface)(如
Iterable<T>
)有关。 :对于这些情况,有必要提供不同的类。但在大多数最终用户用例中,您只需要传递与第一个和第二个参数相同的类。
关于Jackson 的constructParametricType 已被弃用,但constructParameterizedType 的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28502339/