我有一个类方法,它返回我可以遍历的员工列表。返回列表的最佳方式是什么?通常我只是返回一个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. 了解OuterIterator接口PHP
- 3. 了解接口的代码合同
- 4. 了解接口和基类的使用
- 5. 了解ICollection实现和接口
- 6. 了解Spring数据JPA @NoRepositoryBean接口
- 7. 了解窗口#getSharedElementTransition()
- 8. 接口误解
- 9. 如何了解某个接口是否来自特定的接口?
- 10. 了解Vim中的窗口
- 11. 进口android.content.pm.packageParser解决不了
- 12. 了解Dockerfile CMD /入口点
- 13. 了解端口转发
- 14. 了解窗口方法
- 15. 在Laravel中了解口才
- 16. 试图了解RxJS进口
- 17. 了解出口的ES6
- 18. 了解NodeJS中的出口
- 19. 串口通信了解
- 20. 解释Java接口?
- 21. 谁构建了org.osgi.framework。*接口?
- 22. 用于了解VC++中接口IP的API?
- 23. FreeBSD的:了解/var/db/dhclient.leases <接口> DHCP租约文件
- 24. 从C#书籍中了解接口定义
- 25. 需要帮助了解实现接口的抽象类
- 26. 了解外部函数接口(FFI)和语言绑定
- 27. 了解Iterator接口和“foreach”语句之间的关系
- 28. 了解java中的接口,类和构造函数
- 29. 了解Python与Tcl接口的创造性方法吗?
- 30. 了解链接列表