Java Spring:MongoRepository count() 和 findAll()

我注意到 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()?


德玛西亚99
浏览 298回答 2
2回答

喵喵时光机

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

开心每一天1111

来自java.util.List#sizejavadoc:返回此列表中的元素数量。如果此列表包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE。因此,当集合大小超过该方法时,Integer.MAX_VALUE该size方法将返回Integer.MAX_VALUE。我们还能打电话吗List<T> findAll()?是的,但很可能调用会失败OutOfMemoryError
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java