我正在寻找一种方法,该方法如何将泛型与函数一起传递以创建多用途函数。
以下功能仅用于获取事件集合,但是我想添加一个参数,例如根据参数来更改ResponseEntity和ParameterizedTypeReference的类型; List<Place>
,List<Page>
等
也许标题不正确,请进行编辑以使其易于理解。 预先感谢您的支持。
public List<Event> getEventList(String url) {
List<Event> result = Collections.emptyList();
ResponseEntity<List<Event>> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null,
new ParameterizedTypeReference<List<Event>>() {
});
if (responseEntity.hasBody()) {
result = responseEntity.getBody();
}
return result;
}
答案 0 :(得分:2)
关于ParameterizedTypeReference
的事情在于,将其通用化似乎在外观上很简单:
new ParameterizedTypeReference<List<T>>() {}
,但这不能正常工作:“实际” T
在运行时不可用。列表的类型实际上是List<Object>
。
您必须提供具体的ParameterizedTypeReference
作为参数:
public <T> List<T> getEventList(String url, ParameterizedTypeReference<List<T>> ptr) {
List<T> result = Collections.emptyList();
ResponseEntity<List<T>> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, ptr);
if (responseEntity.hasBody()) {
result = responseEntity.getBody();
}
return result;
}
调用方式:
List<Place> places = getEventList(url, new ParameterizedTypeReference<List<Place>>() {});
List<Page> pages = getEventList(url, new ParameterizedTypeReference<List<Page>>() {});
答案 1 :(得分:0)
如果我正确理解了您的问题:
public <T> List<T> getEventList(String url) {
List<T> result = Collections.emptyList();
ResponseEntity<List<T>> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null,
new ParameterizedTypeReference<List<T>>() {
});
if (responseEntity.hasBody()) {
result = responseEntity.getBody();
}
return result;
}