2008-12-12 54 views

回答

44

Iterable<String>IEnumerable<string>相當於。

如果數組實現了Iterable,這將是類型系統中的一個缺陷。 String[]Object[]的一個實例,但Iterable<String>不是Iterable<Object>。類和接口不能乘以不同泛型參數來實現相同的泛型接口。

String[]將在增強for循環中像Iterable一樣工作。

String[]可以很容易地變成一個Iterable

Iterable<String> strs = java.util.Arrays.asList(strArray); 

不想在陣列集合(對於非原語反正)。引用類型的數組有點奇怪,自Java 1.5以來很少需要。

+2

有關_why_的更多信息,您無法在可重用和可迭代之間進行投射,請查看[協方差和反轉換](http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29)。 – 2011-08-20 09:32:20

8

您是否在尋找Iterable<String>

Iterable<T> <=> IEnumerable<T> 
Iterator<T> <=> IEnumerator<T> 
2

我相信Java的等價物是Iterable<String>。雖然String[]沒有實現它,你可以遍歷所有的元素反正:

String[] strings = new String[]{"this", "that"}; 
for (String s : strings) { 
    // do something 
} 

如果你確實需要的東西,實現了Iterable<String>,你可以這樣做:

String[] strings = new String[]{"this", "that"}; 
Iterable<String> stringIterable = Arrays.asList(strings); 
0

Iterable<T>是好的,但有一個小問題。在stream()即lambda表達式中不能輕鬆使用它。

如果你想這樣,你應該得到它的分割器,並使用類StreamSupport()