【发布时间】:2016-10-02 16:55:45
【问题描述】:
所以我今天听说返回一个迭代器是一个更好的解决方案(低耦合/松耦合),而不是返回一个数组列表。
我有一个项目数组列表,我有一个用于这个数组列表的 getter,我想知道为什么在 java 中获取一个迭代器是一个更好的解决方案?
是不是因为迭代器可以根据需要转换成不同的集合?还是有更多我不知道的好处?
【问题讨论】:
-
也是迭代器——至少如果使用得当——不会诱使您在迭代其内容时修改数组列表,因为该数组列表不参与处理它的代码元素。
-
因为可以使用不同的集合实现来获取迭代器,但是所有集合实现都有迭代器。
-
@Mike'Pomax'Kamermans:如果你想使用它的迭代器,你可以完全改变集合。它至少可以保证您不会添加更多元素,但如果您想要一个真正的只读列表,
Collections.unmodifiableList()会更好地返回。 -
没错,但我猜你听到的部分原因是有人读到了iterator pattern 并将其理解为“比列表更好”。
-
请注意,在某些情况下,人们更喜欢返回具体类型,以便为调用方法(或程序员)提供有关如何使用该实例的某些提示。例如,当一个人返回 Guavas immutable collection classes 之一时。调用方法应该“知道”,他不能调用某些修改方法,而不会出现异常。当然,这也可以在 JavaDoc 中解释,但使用它作为返回类型可以确保不会错过。
标签: java oop arraylist iterator loose-coupling