Generics 如何从spring hateoas traverson获取泛型类型列表

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

考虑下面的代码。我正在尝试使用spring hateoas Traverson类获取基于泛型responseType的对象列表

    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