java - Java - RestTemplate获取对象列表为什么使用ParameterizedTypeReference而不是对象数组?

我正在尝试使用spring RestTemplate获取对象列表,我不明白为什么选择parametedtypereference方法来获取使用restemplate而不是只使用Object的对象列表。

但是,为什么不能仅使用Object [] .class? 有什么限制?

ParameterizedTypeReference方法:


ResponseEntity<List<Rating>> responseEntity =


 restTemplate.exchange("http://localhost:8084/ratingsdata/user/" + userId,


 HttpMethod.GET, null, new ParameterizedTypeReference<List<Rating>>() {


 });


List<Rating> ratings = responseEntity.getBody();



Object [] approach :


List<Rating> ratings = Arrays.asList(restTemplate.getForObject("http://localhost:8084/ratingsdata/user/"+userId, Rating[].class));



时间:

答案很简单: 在运行时保持类型信息。

所以回到这个问题 ParameterizedTypeReference<T>.class

通过 new ParameterizedTypeReference<List<Foo.class>> {};在传递类型时,正在实例化一个匿名类,然后在构造函数中从传递的类型中提取类型信息,并将它存储在内部,然后,我们可以在一段时间内进行getType()获取类型信息,以便在运行时执行类型安全的"casting"


 final ParameterizedTypeReference<List<String>> typeRef = new ParameterizedTypeReference<>() {};


 final Type type = typeRef.getType();


 final String typeName = type.getTypeName();


 System.out.println(typeName);


 // will print"java.util.List<java.lang.String>"



这个模式叫做"超级类型标记",你可以在这里阅读更多的内容Neal Gafter's blog - Super Type Tokens

...