Java如何构建整个List

时间:2016-05-20 13:39:37

标签: java

如何在不使用Java迭代的情况下编译完整列表。 我有这个功能:

private List<Object> getItems (List<Object> list, Pagination pagination) {

        if (list.size() > pagination.getItemsXPage()) {

            int init = (pagination.getCurrentPage()-1)* pagination.getItemsXPage();
            int end =  init +  pagination.getItemsXPage();

            if (end > list.size()) {
                end = list.size();
            }

            return list.subList(init, end);

        } else {

            return list;                        
        }       

    }

我想这样做,但这是不可能的?

List<ApplicationSearchItem> applicationSearchItem = (List) getItems (list, searchCriteria.getCategoryProductsPagination()); 

2 个答案:

答案 0 :(得分:4)

在这种情况下,您将使用泛型方法声明:

  

到目前为止,您将学会避免初学者尝试使用Collection&lt;对象&gt;作为集合参数的类型。您可能已经或可能没有认识到使用Collection&lt; ? &GT;也没有去工作。回想一下,您不能只将对象推送到未知类型的集合中。

from oracle generic methods tutorial

返回类型由参数列表的类型定义:

private <T> List<T> getItems (List<T> list, Pagination pagination) {
 ... 
}

答案 1 :(得分:0)

使用当前代码,您必须单独投射每个对象,或者将方法的参数从List<Object>更改为列表<ApplicationSearchItem>以避免使用强制转换。

您不能简单地转换整个列表的原因是因为列表仅仅是引用持有者;实际列表仅指向对象类型,并确保只有正确类型的对象在列表中。在内存本身中,对象仍然独立于列表而存在,因此无论哪种方式,它们都将被单独转换为转换它们的类型。

通过做dok所说的(其他答案),你的方法可以接受任何类型的对象并对它们进行操作。或者,您可以让它只接受您不需要进行演员表的列表。