Generics 如何从spring hateoas traverson获取泛型类型列表
考虑下面的代码。我正在尝试使用spring hateoas Traverson类获取基于泛型responseType的对象列表Generics 如何从spring hateoas traverson获取泛型类型列表,generics,java-8,spring-data-rest,spring-4,spring-hateoas,Generics,Java 8,Spring Data Rest,Spring 4,Spring Hateoas,考虑下面的代码。我正在尝试使用spring hateoas Traverson类获取基于泛型responseType的对象列表 public <T> ArrayList<T> getList(String path, Class<T> responseType) { String url = decodeURL(host + path); try { ParameterizedTypeReference<Reso
public <T> ArrayList<T> getList(String path, Class<T> responseType) {
String url = decodeURL(host + path);
try {
ParameterizedTypeReference<Resources<T>> typeReference = new ParameterizedTypeReference<Resources<T>>() {
};
Traverson traverson = new Traverson(new URI(url), MediaTypes.HAL_JSON);
Resources<T> t = traverson.follow().toObject(typeReference);
ArrayList<T> list = new ArrayList<T>();
list.addAll(t.getContent());
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
有什么想法吗?我做错了什么?您的
参数化类型引用
无法捕获T
的实际类型。您应该考虑使用<代码> RealStype > /Cord>参数,这是一个已捕获的规范<>代码>代码>代码。我不喜欢这些框架,但我敢打赌,有一种方法可以告诉它,您需要一个类型列表……这是行不通的。我在使用responseType作为资源时遇到编译错误。有人说可以使用类作为替换项。请参阅文档,了解如何指定需要类型为的列表
,该类型由类
对象表示。否则,如果这个参数对您没有任何帮助,您可以删除它,让调用者传递一个ParameterizedTypeReference
,而不是User.class
…我将这篇文章称为传递类型t而不是responseType。但正如前面所述,class
参数在这里没有实际用途。由于该方法的唯一目的是返回一个新的ArrayList()
,因此整个方法已经过时,与调用方直接实例化相比没有任何优势。这是可行的,因为ArrayList
是真正的泛型,它不依赖于实际的元素类型。
List<User> users = getList("/users", User.class);
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.foo.data.User