我有一個類方法,它返回我可以遍歷的員工列表。返回列表的最佳方式是什麼?通常我只是返回一個ArrayList。但是,據我所知,接口更適合這種類型的行動。這將是最好的界面使用?另外,爲什麼返回一個接口,而不是實現(比如說ArrayList對象)更好?這對我來說似乎還有很多工作要做。瞭解接口
瞭解接口
回答
做這樣的事情的最好方法就是返回一個列表,最好使用泛型,所以它會是List <Employee
>。
返回List而不是ArrayList意味着如果後來您決定使用LinkedList,則不必更改除創建對象之外的任何代碼(即,調用「new ArrayList())」。
你方法的返回類型應該是IList<Employee>
。
這意味着您的方法的調用者可以使用IList
提供的任何東西,但不能使用特定於ArrayList
的東西。然後,如果您覺得LinkedList
或YourCustomSuperDuperList
可以提供更好的性能或其他優勢,您可以在自己的方法中安全地使用它,而不是使用它來調用它。
這大概接口101 ;-)
接口是執行和落實的用戶之間的合同。
通過使用接口,只要它維護用戶的合同,就允許實現儘可能多地進行更改。
它還允許多個實現使用相同的接口,以便用戶可以重複使用與接口交互的代碼。
你不會說你在說什麼語言,但是在某些.NETish中,那麼返回一個IList比List或甚至ArrayList沒有更多的工作,儘管僅僅提到那個過時的類會讓我認爲你不是在談論.NET。
@傑森
你不妨返回IList的<>因爲數組實際上實現了這個接口。
如果您所做的只是迭代列表,您可以定義一個方法,將列表返回爲IEnumerable(用於.NET)。
通過返回提供所需功能的接口,如果某些新的集合類型在將來會更好/更快/更好地匹配應用程序,只要它仍然實現IEnumerable,則可以完全重寫你的方法,使用裏面的新類型,而不改變任何調用它的代碼。
接口本質上是一個類,它具有某些方法或屬性;編程到一個接口而不是直接的實現允許更加動態和可管理的代碼,因爲只要仍然保留「合同」,就可以完全替換實現。
在你描述的情況下,通過一個接口不給你一個特別的優勢,如果是我,我會通過的ArrayList與泛型類型,或通過數組本身:list.toArray()
是否有任何理由收集需要訂購?爲什麼不簡單地退回IEnumerable<Employee>
?這給出了所需的最低限度 - 如果您以後想要其他形式的存儲,如Bag或Set或Tree或其他任何形式,則您的合同將保持不變。
其實你不應該返回一個列表,如果這是一個框架,至少不是沒有想到它,建議使用的類是一個集合。 List類在服務器可擴展性問題上有一些性能上的改進。這實際上是一個FXCop規則。
我的前提是它更好地返回的接口不同意該推理。我的理由是,你想最大限度地發揮給定的代碼塊的有用性。
考慮到這一點,一個接口用於接受一個項目作爲參數。如果函數參數調用數組或ArrayList,那麼這是唯一可以傳遞給它的東西。如果一個函數參數要求一個IEnumerable,它將接受以及許多其他對象。這更有用
但是,返回值的作用相反。當你返回一個IEnumerable時,你可以做的唯一事情就是列舉它。如果你有一個方便的List並返回,那麼調用你的函數的代碼也可以很容易地做許多其他的事情,比如獲得一個計數。儘管如此,我堅信那些建議你遠離ArrayList的人應該與他們保持聯繫。泛型是好得多。
- 1. 瞭解接口
- 2. 瞭解Web API DOM接口
- 3. 瞭解GWT.create()的Java接口
- 4. 瞭解OuterIterator接口PHP
- 5. 瞭解ICollection實現和接口
- 6. 瞭解Spring數據JPA @NoRepositoryBean接口
- 7. 接口 - 仍試圖瞭解它們
- 8. 瞭解接口的代碼合同
- 9. 瞭解java中的'TypeElement'和'DeclaredType'接口
- 10. 瞭解DAO模式和接口
- 11. 試圖瞭解隱式超接口
- 12. 瞭解多重繼承和接口
- 13. 瞭解接口和基類的使用
- 14. 瞭解窗口#getSharedElementTransition()
- 15. 接口誤解
- 16. 如何瞭解某個接口是否來自特定的接口?
- 17. 進口com.parse.ParseUser「解決不了」
- 18. 瞭解端口轉發
- 19. 進口com.google.android.gms.maps解決不了
- 20. 試圖瞭解RxJS進口
- 21. 在Laravel中瞭解口才
- 22. 瞭解Dockerfile CMD /入口點
- 23. 進口解決不了
- 24. 瞭解Vim中的窗口
- 25. 瞭解NodeJS中的出口
- 26. 瞭解窗口方法
- 27. 串口通信瞭解
- 28. 進口android.content.pm.packageParser解決不了
- 29. 瞭解套接字
- 30. 解釋Java接口?