2008-12-12 24 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()