128

java.util.List.isEmpty()リスト自体がであるかどうかを確認しますかnull、それとも自分で確認する必要がありますか?

例えば:

List<String> test = null;

if (!test.isEmpty()) {
    for (String o : test) {
        // do stuff here            
    }
}

NullPointerExceptionテストがであるため、これはスローされnullますか?

4

8 に答える 8

140

isEmpty()参照でメソッドを呼び出そうとしていnullます(as List test = null;)。これは確かに。をスローしNullPointerExceptionます。代わりに行う必要がありif(test!=null)ます(最初にチェックしnullます)。

オブジェクトに要素が含まれていない場合、メソッドisEmpty()はtrueを返します。ArrayListそれ以外の場合はfalse(そのため、List最初にインスタンス化する必要があります。これは、の場合ですnull)。

この質問を見たいと思うかもしれません。

于 2012-07-16T20:34:12.837 に答える
127

ApacheCommonsCollectionsの使用をお勧めします。

http://commons.apache.org/proper/commons-collections/javadocs/api-release/org/apache/commons/collections4/CollectionUtils.html#isEmpty(java.util.Collection)

これはそれを非常にうまく実装し、十分に文書化されています:

/**
 * Null-safe check if the specified collection is empty.
 * <p>
 * Null returns true.
 *
 * @param coll  the collection to check, may be null
 * @return true if empty or null
 * @since Commons Collections 3.2
 */
public static boolean isEmpty(Collection coll) {
    return (coll == null || coll.isEmpty());
}
于 2013-03-26T11:23:58.460 に答える
20

これにより、-参照でインスタンスメソッドを呼び出そうとする試みと同様に-スローされますが、このような場合は、以下に対して明示的なチェックを行う必要があります。NullPointerExceptionnullnull

if ((test != null) && !test.isEmpty())

これは、を伝播するよりもはるかに優れており、明確Exceptionです。

于 2012-07-16T20:33:45.377 に答える
19

いいえ、java.util.List.isEmpty()リストがであるかどうかはチェックしませんnull

Springフレームワークを使用している場合は、CollectionUtilsクラスを使用してリストが空かどうかを確認できます。また、null参照も処理します。以下は、SpringFrameworkのCollectionUtilsクラスのコードスニペットです。

public static boolean isEmpty(Collection<?> collection) {
    return (collection == null || collection.isEmpty());
}

Springを使用していない場合でも、このコードを調整してAppUtilクラスに追加できます。

于 2016-08-25T03:30:11.937 に答える
8

null参照でメソッドを呼び出すと、常に例外が発生します。最初にオブジェクトがnullかどうかをテストします。

List<Object> test = null;
if (test != null && !test.isEmpty()) {
    // ...
}

または、このロジックをカプセル化するメソッドを記述します。

public static <T> boolean IsNullOrEmpty(Collection<T> list) {
    return list == null || list.isEmpty();
}

次に、次のことができます。

List<Object> test = null;
if (!IsNullOrEmpty(test)) {
    // ...
}
于 2012-07-16T20:33:35.363 に答える
3

はい、例外がスローされます。たぶんあなたはPHPコードに慣れているでしょう、そこでempty($element)はまたチェックしisset($element)ます。Javaではこれは当てはまりません。

メソッドはリストで直接呼び出されるため(メソッドはリストに属します)、簡単に覚えることができます。したがって、リストがない場合、方法はありません。そしてJavaは、このメソッドを呼び出すリストがないことを訴えます。

于 2012-07-16T20:33:43.607 に答える
3

ライオンの答えに加えて、私はあなたがよりよく使うと言うことができますif(CollectionUtils.isNotEmpty(test)){...}

これはnullもチェックするため、手動チェックは必要ありません。

于 2015-07-06T09:09:27.597 に答える
1

独自のisEmpty(複数コレクション用)メソッドを使用することもできます。これをUtilクラスに追加します。

public static boolean isEmpty(Collection... collections) {
    for (Collection collection : collections) {
        if (null == collection || collection.isEmpty())
            return true;
    }
    return false;
}
于 2017-06-16T07:42:21.890 に答える