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

时间:2016-09-06 13:05:36

标签: java generics

有人可以告诉我是否有办法将通用类型T传递给getAPIResponse(...)并在getAPIResponse方法中构建TypeReference。

我想将Model作为泛型类型传递给getAPIResponse,并在getAPIResponse方法中内置TypeReference。

TypeReference<APIResponse<Model>> type = new TypeReference<APIResponse<Model>>(){};
APIResponse<Model> response = getAPIResponse(result, type);

我想避免在getAPIResponse方法之外构建TypeReference实例,而是想在getAPIResponse方法中创建实例,并只将Generic类型传递给方法。

getAPIResponse方法

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

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

    return res;
}

我尝试更改为以下

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>>

如何在调用类中将这些泛型类型传递给我的方法调用?

1 个答案:

答案 0 :(得分:-1)

更新:它不起作用。 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);

你不需要给予&#39;对象