我看到一行代码如下:
for (String w : words) sentence.add(w); // words is declared as String[] words = ...;
Run Code Online (Sandbox Code Playgroud)
据我所知,我认为能够以这种格式编写for循环,我们需要'words'是一个实现Iterable接口并覆盖iterator()函数的类的实例.但'words'是String数组的类型,这对于循环格式如何正确?
有人可以给我一些提示吗?
for-each构造也适用于数组,它隐藏索引变量而不是迭代器.以下方法返回int数组中的值的总和:
Run Code Online (Sandbox Code Playgroud)// 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语句具有以下形式:
Run Code Online (Sandbox Code Playgroud)EnhancedForStatement: for ( FormalParameter : Expression ) Statement该类型的
Expression必须是Iterable或数组类型,或编译时会出现误差.
但请注意,数组不实现Iterable; 来自JLS的第10.1节:
数组类型的直接超类是
Object.每种数组类型都实现了接口
Cloneable和java.io.Serializable.
与以往一样,Java语言规范是值得关注的地方.在这种情况下,它是第14.14.2节,增强for声明:
Run Code Online (Sandbox Code Playgroud)EnhancedForStatement: for ( FormalParameter : Expression ) StatementExpression的类型必须是Iterable或数组类型(第10.1节),否则会发生编译时错误.
...
如果Expression的类型是Iterable的子类型,则转换如下.[...关于如何处理迭代的描述......]
否则,Expression必须具有数组类型,
T[].[...如何处理数组的描述...]
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |