我注意到 mongo 的 Spring 数据中有一些奇怪的东西:MongoRepositoryextendsCrudRepository并findAll()返回 an ,Iterable该count()方法可以正常使用,因为它返回 a long。class CrudRepository { ... Iterable<T> findAll(); long count();}在 mongo 中,MongoRepository该findAll()方法返回一个List:class MongoRepository extends CrudRepository { ... @Override List<T> findAll();}但是 aList#size()返回 anint并且该MongoRepository#count()方法仍然返回 a long。当集合超过时会发生什么Integer.MAX_VALUE!?我们还能打电话吗List<T> findAll()?
2 回答

喵喵时光机
TA贡献1846条经验 获得超7个赞
每个维度表达式都会经历一元数字提升(第 5.6.1 节)。提升的类型必须是 int,否则会发生编译时错误。
2,147,483,648
由于维度必须是 int,因此我们可以在数组中存储最大大小,并且考虑到 ArrayList 只是一个数组,因此我们不能在 ArrayList 中存储超过 INTEGER.MAX_VALUE 的值。(当然,List 的不同实现可能有不同的行为)
Spring Data JPA允许您自定义查询方法。您始终可以自由创建返回类型为 Iterable 的查询方法。
@Override Iterable<T> findAll();

开心每一天1111
TA贡献1836条经验 获得超13个赞
来自java.util.List#size
javadoc:
返回此列表中的元素数量。如果此列表包含多个
Integer.MAX_VALUE
元素,则返回Integer.MAX_VALUE
。
因此,当集合大小超过该方法时,Integer.MAX_VALUE
该size
方法将返回Integer.MAX_VALUE
。
我们还能打电话吗
List<T> findAll()
?
是的,但很可能调用会失败OutOfMemoryError
添加回答
举报
0/150
提交
取消