【发布时间】:2017-12-26 02:03:08
【问题描述】:
我有以下对象初始化。它是 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 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>>(){};
}
【问题讨论】:
-
请提供minimal reproducible example。我很难理解您给出的各个代码行是如何组合在一起的。如果您展示一个完整的类,其中包含足够的代码来说明您所询问的内容,这将有很大帮助。
-
哪个类包含
restResponseParam()? -
ParameterizedTypeReference的全部意义在于它以可以实时使用的方式捕获编译时通用参数,作为防止擦除的措施。如果不提及整个通用“样板”,您将无法从中获得正确的类型。 -
@Code-Apprentice 感谢您的反馈。我已经对问题进行了更改。希望这能让它更容易理解。
-
@RealSkeptic 我在尝试做不可能的事吗?
标签: java generics boilerplate