Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Jackson类型引用是抽象的?_Java_Jackson - Fatal编程技术网

Java 为什么Jackson类型引用是抽象的?

Java 为什么Jackson类型引用是抽象的?,java,jackson,Java,Jackson,为什么Jackson的TypeReference是抽象的?它通常会使用法更难看,因为您需要包含大括号来创建一个内联类(并且大多数过梁会强制您在同一行上不使用大括号) newtypereference(){ }; 这是因为一些模糊的Java语言限制吗?正是为了迫使您创建一个子类,因为这是捕获泛型类型的唯一方法 它写在您链接到的javadoc的第一句话中: 此泛型抽象类用于通过子分类获得完整的泛型类型信息 (我的重点) 文档中还有一个链接,指向解释这一原则的博客帖子 JB Nizet回答了原因。

为什么Jackson的TypeReference是抽象的?它通常会使用法更难看,因为您需要包含大括号来创建一个内联类(并且大多数过梁会强制您在同一行上不使用大括号)

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<>();