java - 是否可以在有条件的情况下在 Java 中声明变量?

标签 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 条件中声明一个变量,或者对于这种情况是否有其他解决方案?

最佳答案

你可以写一个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如果变量最初未分配,则不会提示。

关于java - 是否可以在有条件的情况下在 Java 中声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38766891/

相关文章:

C++ fstream 继续读取相同的前 5 行?

java - <form> 标记未包含在 <s :iterator> in . jsp 的第一 <tr> 行中

java - 机器人Java类 XP vs. Vista Win7

java - 如果 Java 中使用了泛型,如何获取 `int` 并将其转换为 `Integer`?

java - L&C 的 Java 软件结构中堆的数组实现错误

python - 在列表中查找特定值的每三个实例

java - 在 android 中绘制从高度 X 掉落的球的高度与时间图

c - while 循环不会在函数 c 处停止

java - 使用迭代器循环遍历 HashMap 不会因 if 条件而停止

c++ - Do - Try/Catch - While block 内部有 2 个函数