Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java未检查赋值_Java_List_Generics_Collections - Fatal编程技术网

Java未检查赋值

Java未检查赋值,java,list,generics,collections,Java,List,Generics,Collections,我定义了一个函数,它返回实现分页数据接口的所有对象的通用列表 private <T> List<T> paginate(int pageNumber, int pageSize, int totalAvailable, PaginatedResponse paginatedResponse, String url) { List<T> listOfObjects = new ArrayList(); while (pageNumber *

我定义了一个函数,它返回实现分页数据接口的所有对象的通用列表

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;
}
其中PaginationData是定义的接口

public interface PaginationData<T> {

    List<T> getPaginatedObjectsList();
}
公共接口分页数据{
列出getPaginatedObjectsList();
}
sendRequest方法如下所示

public interface PaginatedResponse {

    Pagination getPagination();

    PaginationData getPaginationData();
}

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);
        }
   
}
private T sendRequest(字符串url,类clazz){
HttpResponse HttpResponse=httpClient.send(url);
//Jackson的对象映射器来转换结果
//但是这个结果也可以是分页响应以外的其他类型
试一试{
返回objectMapper.readValue(httpResponse.getEntity(),clazz);
}捕获(IOE异常){
抛出新的ParsingException(e);
}
}
一切正常,我只是在调用listOfObjects变量上的.addAll()方法时收到一个警告。
此警告指出:未选中的赋值,java.util.List到java.util.Collection在
接口PaginatedResponse
中,
PaginationData
为原始类型。您应该将其更正为:

public interface PaginatedResponse{//type参数在此处是必需的,或者至少在方法级别getPaginationData()是必需的
分页getPagination();
PaginationData getPaginationData();//这将删除原始类型用法
}
然后,更新
paginate(…)
方法如下(参数
PaginatedResponse PaginatedResponse
PaginatedResponse PaginatedResponse
以删除原始类型用法):

private List paginate(int pageNumber、int pageSize、int totalAvailable、paginedresponse paginedresponse、字符串url){
// ...
}
此外,将列表初始化为
list listOfObjects=new ArrayList()而不是
列表对象=新ArrayList()
删除原始类型用法


编辑有关
sendRequest()
方法的后续问题:

对于
sendRequest()
方法,请使用from jackson而不是
Class
。有关更多详细信息,请查看主题“类型擦除”

定义如下所示的方法:

private T sendRequest(字符串url,类型引用类型引用){
//…您的原始代码。。。
返回objectMapper.readValue(httpResponse.getEntity(),typeReference);
//…您的原始代码。。。
}
可以这样称呼:

paginatedResponse=sendRequest(url+”?pageNumber=“+pageNumber,new TypeReference(){});

您在一些地方使用。首先要避免这种情况。谢谢@Viral.的评论。。不幸的是,它只将警告移动到paginatedResponse=sendRequest(url+“?pageNumber=“+pageNumber”);返回私有T sendRequest(url)@MarkyMark的方法,在您的问题中没有关于
sendRequest()
方法的参考/详细信息。请相应地更新您的问题。我已更新问题以显示sendRequest方法。请check@MarkyMark,有关详细信息,请查看主题“类型擦除”。在您的情况下,应该使用jackson提供的
TypeReference
,而不是
sendRequest()
方法的类。如下定义:
private T sendRequest(字符串url,类型引用类型引用)
,如下使用:
objectMapper.readValue(httpResponse.getEntity(),类型引用)并按如下方式传递:
paginatedResponse=sendRequest(url+“?pageNumber=“+pageNumber,new TypeReference(){})为了更好地理解,我已经用细节更新了这个答案。