我有类方法,它返回我可以迭代的员工列表。返回列表的最佳方法是什么?通常我只返回一个ArrayList。但是,据我所知,接口更适合这种类型的操作。哪个是最好的界面?另外,为什么返回接口更好,而不是实现(比如ArrayList对象)?对我来说,这似乎还有很多工作要做。
答案 0 :(得分:4)
就个人而言,我会使用List< Employee>用于在后端创建列表,然后在返回时使用IList。当您使用接口时,它为您提供了更改实现的灵活性,而无需更改使用您的代码的人员。如果你想坚持使用ArrayList,那就是非通用的IList。
答案 1 :(得分:2)
@Jason
你也可以退回IList<>因为数组实际上实现了这个接口。
答案 2 :(得分:1)
执行此类操作的最佳方法是返回List,最好是使用泛型,因此它将是List <Employee
&gt ;.
返回List而不是ArrayList意味着如果稍后您决定使用LinkedList,则不必更改除创建对象之外的任何代码(即调用) to“new ArrayList())”。
答案 3 :(得分:1)
如果你所做的只是遍历列表,你可以定义一个方法,将列表返回为IEnumerable(对于.NET)。
通过返回提供所需功能的接口,如果将来会出现一些更好/更快/更适合您的应用程序的新集合类型,只要它仍然实现IEnumerable,您就可以完全重写方法,在其中使用新类型,而不更改任何调用它的代码。
答案 4 :(得分:1)
是否有任何理由要求订购?为什么不简单地返回IEnumerable<Employee>
?这给出了最低限度的要求 - 如果您以后想要其他形式的存储,例如Bag或Set或Tree等等,您的合同将保持不变。
答案 5 :(得分:1)
我不同意返回界面更好的前提。我的理由是,您希望最大化给定代码块公开的有用性。
考虑到这一点,接口用于接受项目作为参数。如果函数参数调用数组或ArrayList,那么这是唯一可以传递给它的东西。如果函数参数调用IEnumerable,它将接受或者许多其他对象。它更有用
然而,返回值相反。当你返回一个IEnumerable时,你唯一能做的就是枚举它。如果你有一个方便的List并返回,那么调用你的函数的代码也可以很容易地做其他一些事情,比如得到一个计数。
我与那些建议你远离ArrayList的人团结一致。泛型是更好。
答案 6 :(得分:0)
您的方法的返回类型应为IList<Employee>
。
这意味着您的方法的调用者可以使用IList
提供但不能使用ArrayList
特定内容的任何内容。然后,如果您觉得LinkedList
或YourCustomSuperDuperList
在某些方面提供了更好的性能或其他优势,您可以在您的方法中安全地使用它,而不是将其调用。
这大致是接口101.; - )
答案 7 :(得分:0)
接口是实现与实现用户之间的契约。
通过使用接口,只要维护用户的合同,您就可以根据需要更改实现。
它还允许多个实现使用相同的接口,以便用户可以重用与接口交互的代码。
答案 8 :(得分:0)
你没有说你正在谈论什么语言,但是在.NETish中,那么返回IList而不是List或者甚至是ArrayList也没有什么工作,尽管仅提到那个过时的类让我觉得你不是在谈论.NET。
答案 9 :(得分:0)
接口本质上是一个类具有某些方法或属性的契约;编程到接口而不是直接实现允许更动态和可管理的代码,因为只要“契约”仍然存在,您就可以完全交换实现。
在你描述的情况下,传递一个接口不会给你一个特别的优势,如果是我,我会传递带有泛型类型的ArrayList,或传递数组本身:list.toArray()
答案 10 :(得分:0)
实际上你不应该返回一个List,如果这是一个框架,至少不是没有想到它,推荐使用的类是Collection。 List类在服务器可扩展性问题上有一些性能改进。这实际上是FXCop规则。
的理由