2016-10-25 26 views
1

我该如何迭代一个类的成员集合。语法电流将此功能添加到Java是否有意义:默认成员集合?

for (Foo f: bar.getFoos()){... 

我只是提出

for (Foo f: bar){... 

这将是,如果只有一个在酒吧Foo类的集合,吸气将被调用或者如果没有消气集合理解将被直接访问(如果公开)。

+4

...然后有人在六个月后出现,并向该类中添加第二个集合,突然间一堆东西停止编译。 – JonK

+2

如果'Bar'实现'Iterable '有意义,那很好。如果它有'Foos'和'Bazs'和'Frobnitzes',没有。 –

+1

'Bar'可以实现'Iterable'接口,并使'iterator'-方法返回集合的迭代器。 – marstran

回答

1

我想这不是一个好主意,因为正如JonK所建议的那样,您可以向类中添加第二个相同类型的集合,并且引用集合的每段代码都是以这种方式停止编译或者指的是错误的集合(如果它指的是第一次出现)。编辑:我不得不修改这个。如果添加了第二个集合,那么代码仍然会引用第一个集合。我认为这可能实际上是一个功能,就像使用依靠单一方法的功能接口一样。

+0

事实上,让它“理解Bar中是否只有一个Foo集合......”的最好方法是让该类的用户明确地访问该集合。 –

0

我看不到热这将创建一个功能的需要。如果要迭代Bar开始Foo s,只需让Bar实施Iterable<Foo>并返回相应的Iterator<Foo>。不要忘记提供适当的.stream().parallelStream()函数,因为它们可能会变得方便。

相关问题