在Java中,可以在for-loop 的初始化部分声明一个变量:
for ( int i=0; i < 10; i++) {
// do something (with i)
}
Run Code Online (Sandbox Code Playgroud)
但随着while声明,这似乎是不可能的.
我经常看到这样的代码,当每次迭代后需要更新while循环的条件时:
List<Object> processables = retrieveProcessableItems(..); // initial fetch
while (processables.size() > 0) {
// process items
processables = retrieveProcessableItems(..); // update
}
Run Code Online (Sandbox Code Playgroud)
在stackoverflow上,我发现至少有一个解决方案来防止获取可处理项的重复代码:
List<Object> processables;
while ((processables = retrieveProcessableItems(..)).size() > 0) {
// process items
}
Run Code Online (Sandbox Code Playgroud)
但是变量仍然必须在while循环之外声明.
所以,因为我想保持我的变量范围干净,是否可以在while条件中声明变量,或者是否有其他解决方案用于此类情况?
And*_*ner 12
您可以while使用for循环编写循环:
while (condition) { ... }
Run Code Online (Sandbox Code Playgroud)
是相同的
for (; condition; ) { ... }
Run Code Online (Sandbox Code Playgroud)
因为语句声明基本括号中的所有三个位都是可选的:
BasicForStatement:
for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement
Run Code Online (Sandbox Code Playgroud)
同样,您可以将while循环重写为for循环:
for (List<Object> processables;
(processables = retrieveProcessableItems(..)).size() > 0;) {
// ... Process items.
}
Run Code Online (Sandbox Code Playgroud)
请注意,某些静态分析工具(例如eclipse 4.5)可能要求将初始值分配给processables,例如List<Object> processables = null.根据JLS的说法,这是不正确的; javac如果变量最初未分配,我的版本不会抱怨.
不,这是不可能的.
它并没有真正太大的意义之一:不像一个for循环,你可以设置"循环变量"的初始状态,在一个while循环中,您测试的价值存在变数,类似的条件检查的的for循环.
当然,如果您担心变量"泄漏"到代码的其他部分,您可以将整个事物包含在额外的范围块中:
{
/*declare variable here*/
while(...){...}
}
Run Code Online (Sandbox Code Playgroud)
或者,将while循环转换为for循环.
| 归档时间: |
|
| 查看次数: |
11782 次 |
| 最近记录: |