任何人都可以建議如何重新寫下面的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