我有一个类方法,它返回一个可以迭代的员工列表。返回列表的最佳方式是什么?通常我只返回一个 ArrayList。然而,据我了解,界面更适合这种类型的操作。哪个是最好使用的界面?另外,为什么返回接口而不是实现(例如 ArrayList 对象)更好?对我来说这似乎还有很多工作要做。

有帮助吗?

解决方案

就我个人而言,我会使用 列表<Employee> 用于在后端创建列表,然后使用 列表 你什么时候回来。当您使用接口时,它使您可以灵活地更改实现,而不必改变谁正在使用您的代码。如果你想坚持使用 ArrayList,那将是一个非泛型 列表.

其他提示

@杰森

您也可以返回 IList<>,因为数组实际上实现了此接口。

做这样的事情的最好方法是返回,正如你所说,一个列表,最好使用泛型,所以它将是列表<Employee>.

返回 List 而不是 ArrayList 意味着,如果稍后您决定使用 LinkedList,则除了创建对象的起始位置(即调用“new”)之外,无需更改任何代码。数组列表())”。

如果您所做的只是迭代列表,则可以定义一个将列表返回为 IEnumerable(对于 .NET)的方法。

通过返回只提供您需要的功能的接口,如果将来出现一些新的集合类型,它更好/更快/更适合您的应用程序,只要它仍然实现 IEnumerable,您就可以完全重写您的方法,使用它内部的新类型,而不更改任何调用它的代码。

有什么理由需要订购该系列吗?为什么不简单地返回一个 IEnumerable<Employee>?这给出了所需的最低限度 - 如果您以后想要某种其他形式的存储,例如袋子、套装或树或诸如此类的东西,您的合同将保持不变。

我不同意返回接口更好的前提。我的原因是您希望最大化给定代码块所公开的有用性。

考虑到这一点,接口可以接受一个项目作为参数。如果函数参数调用数组或 ArrayList,那么这是您可以传递给它的唯一内容。如果函数参数调用 IEnumerable,它将接受其中一个,以及许多其他对象。更有用的是

然而,返回值的作用相反。当您返回 IEnumerable 时,您唯一能做的就是枚举它。如果您有一个方便的列表并返回该列表,那么调用您的函数的代码也可以轻松地执行许多其他操作,例如获取计数。

不过,我与那些建议您远离 ArrayList 的人站在一起。泛型是 好多了。

接口是实现和实现的用户之间的契约。

通过使用接口,您可以根据需要对实现进行更改,只要它维护用户的契约即可。

它还允许多个实现使用相同的接口,以便用户可以重用与该接口交互的代码。

你没有说你在谈论什么语言,但在 .NETish 中,返回 IList 并不比返回 List 甚至 ArrayList 更重要,尽管仅仅提到那个过时的类就让我认为你是不是在谈论.NET。

接口本质上是类具有某些方法或属性的契约;对接口进行编程而不是直接实现可以实现更加动态和可管理的代码,因为只要“合同”仍然存在,您就可以完全交换实现。

在您描述的情况下,传递接口不会给您带来特别的优势,如果是我,我会传递带有泛型类型的 ArrayList,或者传递 Array 本身:列表.toArray()

实际上,如果这是一个框架,你不应该返回一个 List,至少不是没有考虑一下,推荐使用的类是 Collection。List 类具有一些性能改进,但代价是服务器可扩展性问题。这实际上是 FXCop 的一条规则。

你有这样的理由 本文

您的方法的返回类型应该是 IList<Employee>.

这意味着你的方法的调用者可以使用任何 IList 提供但不能使用特定的东西 ArrayList. 。然后如果你在某个时刻感觉 LinkedList 或者 YourCustomSuperDuperList 提供更好的性能或其他优势,您可以在您的方法中安全地使用它,而不是破坏它的调用者。

大致就是接口101。;-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top