2016-10-25 61 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()函數,因爲它們可能會變得方便。

相關問題