2012-04-26 99 views

回答

5

對於像List或ArrayList類型不應該有任何compilcation和你應該返回列表促進Code to an interface

你會發現你的自我限制這樣做,如果這是來自併發包,如CopyOnWriteArrayList,並且你正在使用的方法如addIfAbsent這是List接口中未定義的方法。

因此,如果您返回的ArrayList或者未在合同(List接口)定義這個問題,你可以使用API​​的任何具體實現,但你是從具體實現量變到質變到別的(東西從ArrayListLinkedList限制),因爲每個使用你的API的人都必須根據你的改變進行改變,所以我期望的太多了。

4

這意味着你不會爲返回的對象調用不是List方法的ArrayList方法。

但是,如果對象是一個ArrayList,你可以做一個強制轉換。

2

返回具體類的唯一原因可能是如果調用者需要了解具體的實現,或者可能需要了解具體實現的其他接口。例如,在Android中,您經常需要使用ArrayList,因爲框架不知道如何正確序列化通用列表接口。

15

最好是返回適合您界面的最通用的類​​型。

如果出於某種原因,爲什麼ArrayList固有地適合您要返回的數據,那麼您應該使用它。通常列表是不錯,但你也可以考慮使用集合如果返回的值是固有無序:

Diagram of Java collections hierarchy

+2

+1的圖片:) – 2012-04-26 07:14:09

+1

謝謝你的圖 – 2012-04-26 09:05:29

相關問題