所以我今天听说返回一个迭代器是一个更好的解决方案(低耦合/松散耦合),而不是返回一个arraylist。
我有一个项目的arraylist,我有这个arraylist的getter,并且想知道为什么获得一个迭代器是一个更好的解决方案然后在java中获取一个arrayList?
是否因为迭代器可以根据需要转换为不同的集合?还是有更多我不知道的好处?
答案 0 :(得分:2)
纯粹从两个阶级之间松散或紧密耦合的角度来看,它没有任何不同 - 我最初会对此产生一些分歧,但我会在下面解释原因。如果出于其他原因有更好的选择,这是一个不同的问题,但耦合实际上并不是其中之一。
从接口的角度来看,您有A类,其中包含对具有该集合的B类的引用。 B返回arraylist,意味着它返回java.util.ArrayList(独立于A或B的第3类)。如果你返回一个java.util.Iterator,你也有一个独立于A或B的第三类。在这两种情况下A都不需要或多或少知道B的内部工作,所以耦合保持不变。
但是,根据评论/其他答案,还有其他原因您可能更愿意返回Collection(未指定实际实现)或Iterator。如果您正在创建公共API,那么选择很重要。如果您在自己的代码内部执行此操作,请使用对调用者最简单的选择。
如果它只是一个类练习,请回答迭代器是松散耦合的,因为它们可能没有正确区分。
答案 1 :(得分:2)
如果您决定某个时间点不想使用Arraylist而不是List或其他任何内容,则无需更改依赖代码。
答案 2 :(得分:0)
也许Stream工厂会是更好的选择。仅通过Stream公开集合的最大胜利是它更好地封装了您的域模型的数据结构。只要暴露一个Stream,就不可能使用你的域类来影响List或Set的内部工作。 另请阅读此Should I return a Collection or a Stream?