我注意到 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
提交
取消