为什么要返回 Iterator 低耦合 (OOP)?

Why is returning a Iterator low coupling (OOP)?

所以我今天听说返回迭代器是比返回数组列表更好的解决方案(低 coupling/loose 耦合)。

我有一个项目数组列表,我有一个 getter 这个数组列表,想知道为什么获取迭代器比获取 java 中的数组列表更好?

是不是因为迭代器可以根据需要转换为不同的集合?还是有更多我不知道的好处?

纯粹从两个 class 之间松耦合或紧耦合的角度来看,没有任何不同 - 最初我会对此表示反对,但我将在下面解释原因。如果出于其他原因有更好的选择,这是一个不同的问题,但耦合实际上不是其中之一。

从接口的角度来看,您有 class A 引用了具有集合的 class B。 B returns 数组列表,意思是它 returns java.util.ArrayList(独立于 A 或 B 的 3rd-class)。如果你 return 一个 java.util.Iterator,你还有一个独立于 A 或 B 的第三个 class。在这两种情况下,A 都不需要或多或少地了解 B 的内部工作原理,因此耦合保持不变。

但是,根据 comments/other 答案,还有其他原因可能会让您更喜欢 return 集合(未指定实际实现)或迭代器。如果您要创建 public API,选择很重要。如果您在自己的代码内部这样做,请使用对调用者来说最简单的选择。

如果这只是一个 class 练习,请回答迭代器是松耦合的,因为它们可能无法正确区分。

如果您决定在某个时间点不想使用 Arraylist 而是 List 或其他任何东西,则不必更改依赖代码..

也许 Stream 工厂会是更好的选择。仅通过 Stream 公开集合的最大好处是它更好地封装了领域模型的数据结构。仅仅通过公开一个 Stream 就不可能对您的域 类 的任何使用影响您的 List 或 Set 的内部工作。 另请阅读此 Should I return a Collection or a Stream?