如何在泛型构造函数中传递参数类名称

时间:2016-09-02 11:50:39

标签: java spring

public class RestResponseDTO<T extends Object> {
    private  T result;
}

我正在初始化的代码:

public RestResponseDTO getObject(String url,Class clz){
    Class cv = clz.getClass();
    RestResponseDTO<cv> restResponseDTO =restTemplate.getForObject(url,RestResponseDTO.class);
    return restResponseDTO;
}

如何根据RestResponseDTO类型在getObject函数中初始化clz

ps- getForObject是spring restTemplate的标准函数 - http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#getForObject-java.lang.String-java.lang.Class-java.lang.Object...-

3 个答案:

答案 0 :(得分:0)

您可以添加以下方法:

void init(Class clazz) {
     //you initializing logic
}

并将其命名为

RestResponseDTO<cv> restResponseDTO =restTemplate.getForObject(url,RestResponseDTO.class);
restResponseDTO.init(clz);
return restResponseDTO;

PS:您的cv变量将始终具有相同的值。

答案 1 :(得分:0)

请尝试:

ResponseEntity responseEntity = restTemplate.getForObject(url,RestResponseDTO.class);

和 responseEntity.getBody() 会给你对象T.

答案 2 :(得分:0)

您无法将具有泛型参数的类传递给具有参数类型Class<?>的方法,您需要Type之类的内容。

一种方式(我唯一知道的)是:创建一个包含泛型参数的具体类型。

class IntegerResponse extends RestResponse<Integer>{
    ...
}

这样你就可以通过IntegerResponse.class