0

簡単かつ常にコレクションを返す Apache Commons のような API を見つけたいと思います。

その意図は、コレクションの反復前に NPE チェックまたは CollectionUtils.isNotEmpty チェックを必要としないコードを生成することです。コードの前提は、常にリスト インスタンスを保証することであり、コレクションの反復ごとにコードの複雑さを排除します。

メソッドの例を次に示しますが、独自のロールではなく API が必要です。

private List<Account> emptyCollection(
        List<Account> requestedAccounts) {
    if (CollectionUtils.isNotEmpty(requestedAccounts)) {
        return requestedAccounts;
    } else {
        return new ArrayList<Account>();
    }
} 

どのクラスにも汎用的に使用できる汎用 API/メソッドを見つけたいと思います。

これは、私がトリックを行うのに役立つかもしれないコモンズ内の私の研究クラスの一部です. http://commons.apache.org/collections/apidocs/org/apache/commons/collections/TransformerUtils.html

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

.collect は、トランスフォーマーを使用して機能する可能性があります。

私は代替 API の使用にもオープンです。

4

2 に答える 2

3

これはあなたが言っていることの例ですか?

public static <T> List<T> nullToEmpty(List<T> list) {
    if (list != null) {
        return list;
    }

    return Collections.emptyList();
}
于 2012-06-21T14:57:28.420 に答える
0

あなたの質問は少しわかりにくいです.NPEを避けたいだけですか、それとも CollectionUtil.isNotEmpty も避けたいですか? 1 つ目は非常に簡単ですが、2 つ目はそうではありません。基本的に、API が少なくとも 1 つの要素を含む Collection を常に返すことを保証したいからです。これはビジネス中心の制約であり、API コントラクトで保証できるものではありません。

回避したいのが NPE だけの場合は、java.lang.Collections.EMPTY_(SET|MAP|LIST) クラスを使用できます。ただし、これらは不変です。つまり、呼び出しコードは、この方法で返されたコレクションにオブジェクトを追加できません。呼び出しコードで Collection を変更する (要素の追加/削除/更新) 場合は、LIST|MAP|SET などのゼロ要素の具体的な実装を返す必要があります。

于 2012-06-21T15:01:20.733 に答える