Java 为什么Jackson类型引用是抽象的?
为什么Jackson的TypeReference是抽象的?它通常会使用法更难看,因为您需要包含大括号来创建一个内联类(并且大多数过梁会强制您在同一行上不使用大括号)Java 为什么Jackson类型引用是抽象的?,java,jackson,Java,Jackson,为什么Jackson的TypeReference是抽象的?它通常会使用法更难看,因为您需要包含大括号来创建一个内联类(并且大多数过梁会强制您在同一行上不使用大括号) newtypereference(){ }; 这是因为一些模糊的Java语言限制吗?正是为了迫使您创建一个子类,因为这是捕获泛型类型的唯一方法 它写在您链接到的javadoc的第一句话中: 此泛型抽象类用于通过子分类获得完整的泛型类型信息 (我的重点) 文档中还有一个链接,指向解释这一原则的博客帖子 JB Nizet回答了原因。
newtypereference(){
};
这是因为一些模糊的Java语言限制吗?正是为了迫使您创建一个子类,因为这是捕获泛型类型的唯一方法 它写在您链接到的javadoc的第一句话中: 此泛型抽象类用于通过子分类获得完整的泛型类型信息 (我的重点)
文档中还有一个链接,指向解释这一原则的博客帖子 JB Nizet回答了原因。我只是想展示一下行动的原则 您可以在其他课程上亲自尝试:
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>() {};
System.out.println(a.getClass().getGenericSuperclass());
System.out.println(b.getClass().getGenericSuperclass());
具有泛型超类:
TypeReference<java.util.Map<java.lang.String, java.lang.String>>
但是
p
和q
的类型是无法区分的。@jbnize不能回答这个问题,所以我可以+1@MauricePerry我从一开始就应该这么做。现在就完成。真的不同意这一点上的反对票-它可能对那些“知情者”有一个清晰、相当直截了当的答案,但通过子类化在运行时保留通用信息这一事实本身就是一个小事实。您的第一个示例非常具有说明性,+1我知道需要它来捕获类型。我想我是在试图理解为什么java会这样做。
java.util.AbstractList<E>
java.util.ArrayList<java.lang.String>
new TypeReference<Map<String, String>>() { }
TypeReference<java.util.Map<java.lang.String, java.lang.String>>
new TypeReference<Map<Integer, Integer>>() { };
TypeReference<Map<String, String>> p = new TypeReference<>();
TypeReference<Map<Integer, Integer>> q = new TypeReference<>();