0

メソッドを直接呼び出す強化された for ループが気になっただけです。コード内にネストされているのは、大文字の私の質問です。

public class ExtendedForLoop {

    public static List<Integer> returnList() {
        System.out.println("Hurray ----> ");
        List<Integer> abc = new ArrayList<Integer>();
        abc.add(5);
        abc.add(10);
        abc.add(20);
        return abc;
    }

    public static void main(String args[]) {
        for (Integer i : returnList()) { // <----- OPTION 1. Include function call in extended loop.
            System.out.println(i);
        }

        List<Integer> list  = returnList()
        for (Integer i : list) { // <----- OPTION 2. Provide list to function call.
            System.out.println(i);
        }
    }
}

一部の例外を処理できるため、オプション 2 を好みます。ただし、例外が予想されない場合は、オプション 1 によって新しい変数の不要な宣言を減らすことができるため、煩雑さが軽減されます。

しかし、一般的に。

  1. どのオプションが優先されますか?
  2. それがオプション 2 であり、オプション 2 を選択する唯一の理由が例外の処理である場合、例外が予期されない場合はオプション 1 を使用する必要がありますか?
4

4 に答える 4

1

nullチェックを使用した2番目のアプローチの方が安全だと思います。

強化された for ループはNullPointerException、メソッドが返された場合に通過しますnull

于 2013-08-12T18:30:51.843 に答える
1

リストを返すコードの所有者であり、null が返されないことを保証できる場合は、オプション 1 を使用することをお勧めします。

私が所有者でない場合は、別の構成を使用することを好みます

for(Integer i : GuaranteeCollection(resultList())
{
// ドスタッフ
}
public static <T> Collection<T> GuaranteeCollection(Collection<T> c)
{
    c を返します != null ? c : Collections.EMPTY_LIST;
}

これにより、コード内で不要な変数宣言が作成されるのを回避し、NPE を防ぐことができます。

于 2013-08-12T18:39:08.570 に答える
0

システム設計によって異なります。

null オブジェクトを回避する多くのプロジェクト ターゲット。

returnList()が返されないことが確実な場合null(代わりに空のリストを返す必要があります (またはCollections.emptyList)、解決策 1 に進み、それ以外の場合は 2 に進みます。

于 2013-08-12T18:44:29.563 に答える
-2

NullpointerExceptionを処理している場合は、オプション 1 を使用することをお勧めします。これは、メモリを占有する追加の変数「リスト」をスタックに作成しているため、パフォーマンスも少し低下します。

于 2013-08-12T18:36:00.417 に答える