Java 返回没有参数化参数的泛型列表

Java 返回没有参数化参数的泛型列表,java,spring,rest,generics,casting,Java,Spring,Rest,Generics,Casting,已在GenericService中创建泛型方法: public <E> ResponseEntity<List<E>> get(String url) throws RestClientException, NotAuthenticatedException { ResponseEntity<List<E>> l = getClient().template().exchange(getClient().apiUrl(u

已在GenericService中创建泛型方法:

public <E> ResponseEntity<List<E>> get(String url) throws RestClientException, NotAuthenticatedException {
        ResponseEntity<List<E>> l = getClient().template().exchange(getClient().apiUrl(url), HttpMethod.GET, null,
                new ParameterizedTypeReference<List<E>>() {
                });
        return l;
}
...

ResponseEntity<List<NotificationDTO>> result = get(url);
List result.getBody(); //<--debug point
但它总是将没有参数化项的列表发送到E,这应该是调试点处的NotificationDTO列表

有人告诉或建议为什么ParameterizedTypeReference:53没有提供正确的类型?

这是由于

在编译时,所有泛型类型信息都会被检查、删除,因此在运行时不可用

维基百科上的部分可能有助于更好地理解它。

这是由于

在编译时,所有泛型类型信息都会被检查、删除,因此在运行时不可用

Wikipedia上的部分可能有助于更好地理解它。

类型令牌hack参数化类型引用通过在源代码中返回编译时提供给它的实际类型参数来工作。在你的情况下,就是这样

new ParameterizedTypeReference<List<E>>()
换句话说,它是一个列表。由于Jackson或任何您使用的反序列化程序都不知道E是什么,所以它使用其默认类型

无法将类型标记与类型变量一起动态使用。使用具体类型。

类型标记hack parametedTypeReference通过在源代码编译时返回提供给它的实际类型参数来工作。在你的情况下,就是这样

new ParameterizedTypeReference<List<E>>()
换句话说,它是一个列表。由于Jackson或任何您使用的反序列化程序都不知道E是什么,所以它使用其默认类型


无法将类型标记与类型变量一起动态使用。使用具体类型。

它总是将没有参数化项的列表发送到E-这是什么意思?您的代码不必要地难以阅读sir@Andrzej道尔:意思是,它返回列表,但我期待列表,但索蒂里奥斯·德里马诺实际上已经回答了。弗洛布已经在理论上给出了答案。@kolossus:它是为了传达问题的本质而制造的。有什么建议可以让你更清楚吗?它总是把没有参数化项目的列表发送到E-你这是什么意思?你的代码不必要地难以阅读sir@Andrzej道尔:意思是,它返回列表,但我期待列表,但索蒂里奥斯·德里马诺实际上已经回答了。弗洛布已经在理论上给出了答案。@kolossus:它是为了传达问题的本质而制造的。有什么建议可以让你更清楚地理解吗?谢谢你提供了一些更深入的理论,并在第二个链接中找到了在See下开发Valhalla项目谢谢:-我再次像过去一样深入挖掘维基百科的深度…谢谢你提供了一些更深入的理论,并在第二个链接中找到了在See下开发Valhalla项目谢谢:-我再一次像过去一样深入维基百科的深处。。。