繁体   English   中英

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

[英]Is it possible to declare a variable within a Java while conditional?

在 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 上,我至少找到了一个解决方案来防止获取可处理项目的重复代码:

List<Object> processables;
while ((processables = retrieveProcessableItems(..)).size() > 0) {
    // process items
}

但是变量仍然必须在 while 循环之外声明。

所以,因为我想保持我的变量范围干净,是否可以在 while 条件中声明一个变量,或者对于这种情况是否有其他解决方案?

您可以使用for循环编写while循环:

while (condition) { ... }

是相同的

for (; condition; ) { ... }

因为语句声明基本括号中的所有三个位都是可选的:

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版本不会抱怨。

不,这是不可能的。

它也没有太多意义:不像你可以设置“循环变量”的初始状态的for循环,在while循环中你测试现有变量的值,类似于条件检查 for循环。

当然,如果您担心变量“泄漏”到代码的其他部分,您可以将整个事物包含在额外的范围块中:

{
   /*declare variable here*/
   while(...){...}
}

或者,将while循环转换为for循环。

做一个/一会儿:

String value;
do {
    value = getValue();
    ...your processing
} while (value != null && !value.isEmpty());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM