任何人都可以建议如何重新写下面的Java代码片段,如果有的话,为什么它会不合适,谢谢!这个java代码片段可以重写吗?
try {
int i = 0;
while (true)
a[i++].func();
} catch(ArrayIndexOutOfBoundsException e) {
}
任何人都可以建议如何重新写下面的Java代码片段,如果有的话,为什么它会不合适,谢谢!这个java代码片段可以重写吗?
try {
int i = 0;
while (true)
a[i++].func();
} catch(ArrayIndexOutOfBoundsException e) {
}
使用for-each循环:
for(TypeOfArray item : a) {
item.func();
}
或可替代简单的for循环:
for(int i = 0; i < a.length; i++) {
a[i].func();
}
生成的字节码是或多或少相同的,但我发现的for-each循环更优雅。您的代码是不合适的,因为它:
由于一个好的一般原则,你不应该使用例外进行流量控制。坦率地说,在阵列的末端跑起来就是一片空白。
尝试使用 “foreach” 循环:
for (IHasFunc hasFunc : a) {
hasFunc.func();
}
不要使用异常来结束循环。使用a.length
来确定大小。
如果使用for
循环这样的:
for (YourObject obj : a) {
obj.func();
}
那么你避免索引变量的要求。
如前所述,例外情况不适合流量控制。创建和追踪执行流程非常困难。
Ist此作业? – RoToRa 2012-07-12 09:14:11
你明白这是干什么的吗?如果是这样,你必须知道它为什么不合适...... – Betlista 2012-07-12 09:16:34
这在[* Java Puzzlers *]的第42项中涵盖(http://www.amazon.co.uk/Java-Puzzlers-Traps-Pitfalls-Corner/DP/032133678X /)。 – 2012-07-12 09:16:45