次のJavaスニペットを書き直す方法を誰か提案できますか?もしそうなら、なぜそれが不適切なのか、ありがとう!!
try {
int i = 0;
while (true)
a[i++].func();
} catch(ArrayIndexOutOfBoundsException e) {
}
次の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();
}
次に、インデックス変数の要件を回避します。
前述のように、例外はフロー制御には適していません。作成にはコストがかかり、実行フローの追跡は困難です。