我看到了如下一行代码:
for (String w : words) sentence.add(w); // words is declared as String[] words = ...;
就我所知,我认为要能够以这种格式编写for循环,我们需要将“ words”作为实现Iterable接口并覆盖iterator()函数的类的实例。但是’words’是String数组类型,这对于循环格式如何正确?
有人可以给我一些提示吗?
从有关此主题的Java教程中:
for-each构造也适用于数组,其中它隐藏索引变量而不是迭代器。以下方法返回int数组中的值之和: // Returns the sum of the elements of a int sum(int[] a) { int result = 0; for (int i : a) result += i; return result; }
for-each构造也适用于数组,其中它隐藏索引变量而不是迭代器。以下方法返回int数组中的值之和:
// Returns the sum of the elements of a int sum(int[] a) { int result = 0; for (int i : a) result += i; return result; }
而从该JLS的§14.14.2(Java语言规范):
for语句的增强形式为: EnhancedForStatement: for ( FormalParameter : Expression ) Statement 的类型Expression必须为Iterable或数组类型,否则会发生编译时错误。
for语句的增强形式为:
EnhancedForStatement: for ( FormalParameter : Expression ) Statement
的类型Expression必须为Iterable或数组类型,否则会发生编译时错误。
Expression
Iterable
但是请注意,数组没有实现Iterable;从JLS的§10.1开始:
数组类型的直接超类为Object。 每种数组类型都实现接口Cloneable和java.io.Serializable。
数组类型的直接超类为Object。
Object
每种数组类型都实现接口Cloneable和java.io.Serializable。
Cloneable
java.io.Serializable