-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

ループを終了するために例外を使用しないでください。a.lengthサイズを決定するために使用します。

于 2012-07-12T09:14:29.263 に答える
0

forこのようにループを使用する場合:

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

次に、インデックス変数の要件を回避します。

前述のように、例外はフロー制御には適していません。作成にはコストがかかり、実行フローの追跡は困難です。

于 2012-07-12T09:16:14.727 に答える