在編寫返回元素的序列的方法時郑什,客戶端有時會希望將返回結(jié)果當(dāng)做Stream 處理睡蟋,有時希望將它用于迭代媒殉,為了盡量兼顧兩者,在返回元素序列的方法時應(yīng)該優(yōu)先返回Collection期揪,因?yàn)镃ollection接口是Iterable的子類型, 還有一個stream方法, 所以Collection或其一個合適的子類型, 通常是返回序列的公有方法返回值的最好選擇.
因此優(yōu)先考慮返回Collection可以更加方便客戶端使用晶府。
但是也有特例:
當(dāng)返回的序列非常大的時候椒袍,盡量不要使用Collection坛吁,先根據(jù)需求返回Stream 或Iterable。 如果有必要彤委,可以提供Stream 與Iterable互轉(zhuǎn)的適配器鞭铆。
因?yàn)榇藭r使用Collection 作為返回類型有個缺點(diǎn):Collecion有一個返回int類型的size 方法,它限制返回的序列長度最大為Interger.MAX_VALUE.
很多方法都會返回元素的序列焦影,在java8之前车遂,主要返回的是Collection、Set斯辰、List舶担、Iterable以及數(shù)組類型。java8 之后可以返回Stream椒涯。但是在實(shí)際開發(fā)中柄沮,我沒有見過直接把Stream 作為函數(shù)返回的數(shù)據(jù)類型的用法回梧,最多只是為了減少計(jì)算废岂,把Stream 抽取為局部變量。
將Collection 作為返回值狱意,主要是因?yàn)樗荌terable的子類型, 還有一個stream方法湖苞。能為客戶端提供便利。讀這部分我的感悟是详囤,在設(shè)計(jì)方法時财骨,要盡量為調(diào)用方考慮,對于返回值而言藏姐,能盡量精確返回類型就盡量精確隆箩,能確定返回值是List就不要返回Collection。
另外再設(shè)計(jì)方法時羔杨,如果返回的序列非常大捌臊,要根據(jù)需求返回Stream 或Iterable。這點(diǎn)我之前沒有注意到兜材,因?yàn)樵谌粘i_發(fā)中理澎,幾乎不會遇到這么大的數(shù)據(jù)量逞力,因?yàn)橄到y(tǒng)中的代碼幾乎也都是直接返回的Collection。 不過這一點(diǎn)值得留意糠爬,免得之后踩坑寇荧。