如何在不使用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());
答案 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所说的(其他答案),你的方法可以接受任何类型的对象并对它们进行操作。或者,您可以让它只接受您不需要进行演员表的列表。