我遇到了下面的源代码,我不明白:
final Book book = objectMapper.readValue(string, new TypeReference<>() {
});
Jackson如何理解从提供的字符串反序列化哪个类?
我在this article中发现了一个类似的构造,它被写为抛出一个异常。但是代码实际上工作了,Book被反序列化了。这是什么黑魔法?
我遇到了下面的源代码,我不明白:
final Book book = objectMapper.readValue(string, new TypeReference<>() {
});
Jackson如何理解从提供的字符串反序列化哪个类?
我在this article中发现了一个类似的构造,它被写为抛出一个异常。但是代码实际上工作了,Book被反序列化了。这是什么黑魔法?
1条答案
按热度按时间zmeyuzjn1#
这是处理Java泛型类型擦除的一种聪明方法。
为了实现泛型,Java编译器将类型擦除应用于:
Neil Gafter指的是
作为 * 超类型令牌 *。
当您现在执行
或在Neals example中
在赋值语句右边创建的匿名类不会发生类型擦除,它有一个固定的泛型类型,可以被超类访问,如下所示:
Jacksons
ObjectMapper
稍后将使用this.type
来确定您想要反序列化的内容的类型。菱形操作员的观察通常是正确的。