【发布时间】:2021-01-23 18:48:19
【问题描述】:
我定义了一个函数,它返回实现 PaginationData 接口的任何对象的通用列表
private <T> List<T> paginate(int pageNumber, int pageSize, int totalAvailable, PaginatedResponse paginatedResponse, String url) {
List<T> listOfObjects = new ArrayList();
while (pageNumber * pageSize <= totalAvailable) {
paginatedResponse = sendRequest(url + "?pageNumber=" + pageNumber, paginatedResponse.getClass());
listOfObjects.addAll(paginatedResponse
.getPaginationData()
.getPaginatedObjectsList());
pageNumber++;
}
return listOfObjects;
}
和这样定义的 PaginatedResponse
public interface PaginatedResponse {
Pagination getPagination();
PaginationData getPaginationData();
}
其中 PaginationData 是定义的接口
public interface PaginationData<T> {
List<T> getPaginatedObjectsList();
}
sendRequest 方法如下所示
private <T> T sendRequest(String url, Class<T> clazz) {
HttpResponse httpResponse = httpClient.send(url);
//Jackson's object mapper to transform the result
// but this result can be also other type than the PaginatedResponse
try {
return objectMapper.readValue(httpResponse.getEntity(), clazz);
} catch (IOException e) {
throw new ParsingException(e);
}
}
一切正常 我只是在 listOfObjects 变量上调用 .addAll() 方法时收到警告。 此警告指出:未检查分配,java.util.List 到 java.util.Collection extends T> 原因,paginatedResponse.getPaginationData() 具有原始类型,因此 getPaginatedObjectList() 的结果被擦除。
所以问题是当我只是返回包含在列表中的通用对象并且我从通用分页响应中获取它们时如何消除警告,该响应可以是实现 PaginatedResponse 的任何类型。
【问题讨论】:
-
您在几个地方使用了raw types。从避免这种情况开始。
标签: java list generics collections