Java 将泛型类型动态传递到方法中,以使用该类型构建对象的实例

Java 将泛型类型动态传递到方法中,以使用该类型构建对象的实例,java,generics,Java,Generics,有人能告诉我是否有方法将泛型类型T传递给getAPIResponse。。。并在getAPIResponse方法中构建TypeReference 我希望将模型作为泛型类型传递给getAPIResponse,并在getAPIResponse方法中内置TypeReference TypeReference<APIResponse<Model>> type = new TypeReference<APIResponse<Model>>(){}; APIRe

有人能告诉我是否有方法将泛型类型T传递给getAPIResponse。。。并在getAPIResponse方法中构建TypeReference

我希望将模型作为泛型类型传递给getAPIResponse,并在getAPIResponse方法中内置TypeReference

TypeReference<APIResponse<Model>> type = new TypeReference<APIResponse<Model>>(){};
APIResponse<Model> response = getAPIResponse(result, type);
我希望避免在getAPIResponse方法之外构建TypeReference实例,而是希望在getAPIResponse方法内创建实例,并只将泛型类型传递给该方法

getAPIResponse方法

我试着换到下面的位置

protected final <T> APIResponse<T> getAPIResponse(MvcResult pResult, T t) {

    APIResponse<T> res = null;
    try {
        TypeReference<APIResponse<T>> type = new TypeReference<APIResponse<T>>(){};
        res = new ObjectMapper().readValue(pResult.getResponse().getContentAsString(), type);
    }
    catch (IOException e) {
        Assert.fail(ExceptionUtils.getStackTrace(e));
    }

    return res;
}
但我不知道如何调用这个方法。假设我想回来

 APIResponse<Bank>
 APIResponse<Branch>
 APIResponse<List<Employee>>
如何将这些泛型类型传递到调用类中的方法调用中?

更新:它不起作用。JSON转换为Map而不是APIResponse,…:

试试这个:

protected final <T> APIResponse<T> getAPIResponse(MvcResult pResult) {
APIResponse<T> res = null;
    try {
        TypeReference<APIResponse<T>> type = new TypeReference<APIResponse<T>>(){};
        res = new ObjectMapper().readValue(pResult.getResponse().getContentAsString(), type);
    }
    catch (IOException e) {
        Assert.fail(ExceptionUtils.getStackTrace(e));
    }

    return res;
}
并致电:

APIResponse<Model> response = getAPIResponse(result);

你不需要给出“t”对象。

对于Bank和Brank,你可以用Bank.class调用它,对吗?但列表显示了TypeReference存在的原因,以及它可能无法在此范围内工作的原因。@Bob Brinks会工作吗?\u…是否有方法传递泛型类型T…,是,这正是类型引用的目的。@Arkadiy可能还没有尝试过,但如果您使用它,您将失去一些类型安全性,我不建议这样做。这肯定不起作用。您给TypeReference指定的是一个类型变量,而不是一个具体的类型。感谢Robertiano,删除了T作为方法参数,效果很好。@SotiriosDelimanolis-您能详细说明为什么它不起作用吗。似乎对我来说使用ListType引用返回的类型将是APIResponse,而不是实际的APIResponse类型。ObjectMapper不能用它做任何事情。@BobBrinks T可以是任何东西,列表,集合。。。T没有边界。
APIResponse<Model> response = getAPIResponse(result);