2012-05-29 61 views
0

接受和返回Iterable<T>類型的Java方法非常普遍。我看到的問題是迭代器interface是如此有限,它要麼需要將Iterable重構爲可用的數據結構,要麼迫使用戶執行Iterable的多次遍歷,增加執行時間。Java優點和缺點可重用

有人可以糾正我嗎? Iterables和我認爲的一樣糟糕嗎?如果你被迫使用它們,是否有任何技術可以用來解決Iterables的侷限性?

回答

6

關於接受Iterable<T>這顯然是一件好事。這意味着你幾乎可以傳遞任何數據結構 - 它只需要實現非常簡單的Iterable<T>接口。這使代碼更容易重用。

對於返回Iterable<T>的好處之一是該方法的實現可能會發生變化 - 可能使用更高效的數據結構,或者在請求時懶惰地生成結果(例如從磁盤流式傳輸它們)。在不中斷客戶的情況下更改實施很容易,因爲它們僅取決於接口Iterable<T>。如果您已經暴露了List<T>,那麼您不能確定您的客戶將按順序訪問數據。

如果您需要多次訪問結果,那麼首先將數據複製到不同的結構中是有意義的。但是隻有你知道特定的收藏對你的具體情況最有用。有時候可能是ArrayList。其他時候,您可能更願意將商品存儲在HashMap中。所以你通常不得不將數據複製到新的數據結構中。

1

此外,在JDK 8我們將看到Iterable接口的重大改進。

由於增加了extension methods,該接口將提供默認的實現和許多新的功能將被添加到提供的能夠接受lambda expressions的高次函數的等效,也lazy evaluation將實施由於其迭代性質和不提到並行性,所以現在流行。

1

接受Iterable<T>是一個偉大的服務給你的客戶。

返回它往往是對他們的損害。如果您不打算改變想法來實現結果,您應該儘可能具體。