是否可以在条件下在Java中声明变量?

时间:2016-08-04 12:07:32

标签: java while-loop

在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条件中声明变量,或者是否有其他解决方案用于此类情况?

2 个答案:

答案 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循环。