我有以下对象初始化。它是RestfulService类的一部分。
ParameterizedTypeReference<RestResponsePage<ScheduledScanDto>> ptr =
new ParameterizedTypeReference<RestResponsePage<ScheduledScanDto>>(){};
它在课堂上使用了好几次但有不同的参数。例如
ParameterizedTypeReference<RestResponsePage<ScanDto>> ptr =
new ParameterizedTypeReference<RestResponsePage<ScanDto>>(){};
或
ParameterizedTypeReference<RestResponsePage<SomeOtherObject>> ptr =
new ParameterizedTypeReference<RestResponsePage<SomeOtherObject>>(){};
它有点罗嗦......我正在尝试创建一个私有方法来返回ParameterizedTypeReference对象作为私有方法的一部分。这将减少类中的样板代码和代码重复。我正在努力使用私有方法的语法,特别是泛型的嵌套。
想通过执行以下操作获取ParameterizedTypeReference对象的实例
pageTypeReference(AnyClassObjectHere.class)
给出一些背景信息。我计划在发出休息请求时通过调用private方法来减少样板代码。所以看起来像以下......
private List<ScanDto> methodMakeScanRequest{
List<ScanDto> = restTemplate.exchange("/localhost/scans-url",HttpMethod.GET, pageTypeReference(ScanDto.class)).getBody()
}
...更新
我的尝试看起来像这样。这种作品。但是它现在只是映射到通用链表。对象类型被忽略。
private <T> ParameterizedTypeReference<RestResponsePage<T>> pageTypeReference(Class<T> clazz) {
return new ParameterizedTypeReference<RestResponsePage<T>>(){};
}
答案 0 :(得分:1)
请注意clazzName
是变量,而不是类型。这意味着您不能将其用作模板参数。例如,由于您要将ScanDto.class
传递给它,因此您应将其声明为Class<T>
,而不仅仅是T
。您可以使用反射创建类型为T
的实例。
答案 1 :(得分:0)
您的私有方法在语法上是不正确的 - 方法名称是什么?( restResponseParam
或pageTypeReference
),预期的返回类型是什么?( {{ 1}}或T
)。现在,我假设您知道这些问题的答案,但最后却出现了语法错误的代码。所以,我已经编写了一个并行示例来说明您可能想要实现的目标(我的理解 - 从ParameterizedTypeReference<RestResponsePage<T>>
返回ParameterizedTypeReference<RestResponsePage<T>>
实例)可以这样做。< / p>
T
你真的不需要Class来创建一个实例,除非你想直接用T做一些反思。