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