-6

任何人都可以建议如何重新编写以下 Java 代码片段,如果是这样,为什么它不合适,谢谢!

try {
    int i = 0;
    while (true)
        a[i++].func();
} catch(ArrayIndexOutOfBoundsException e) {
}
4

4 回答 4

8

使用for-each循环:

for(TypeOfArray item : a) {
    item.func();
}

或者一个简单的 for 循环:

for(int i = 0; i < a.length; i++) {
    a[i].func();
}

生成的字节码或多或少相同,但我发现 for-each 循环更优雅。您的代码不合适,因为它:

  • 使用异常进行流量控制
  • 使用 while(true) 循环(如果有其他方法,请不要使用它)
于 2012-07-12T09:14:21.483 回答
4

作为一个好的一般原则,您不应该使用异常来进行流控制。坦率地说,跑出数组的末端只是懒惰。

尝试使用“foreach”循环:

for (IHasFunc hasFunc : a) {
    hasFunc.func();
}
于 2012-07-12T09:14:26.080 回答
0

如果您这样使用for循环:

for (YourObject obj : a) {
   obj.func();
}

那么你就避免了对索引变量的要求。

如前所述,异常不利于流量控制。创建它们的成本很高,并且很难跟踪它们的执行流程。

于 2012-07-12T09:16:14.727 回答
0

不要使用异常来结束循环。用于a.length确定大小。

于 2012-07-12T09:14:29.263 回答