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 ?第一个非常简单,第二个则不然,因为您本质上想要保证您的 API 将始终返回一个包含至少一个元素的 Collection。这是 IMO 以业务为中心的约束,而不是您可以通过 API 合同保证的东西。

如果您只想避免 NPE,则可以使用 java.lang.Collections.EMPTY_(SET|MAP|LIST) 类。但请注意,这些是不可变的,即调用代码,不能将对象添加到以这种方式返回的集合中。如果您希望调用代码改变集合(即添加/删除/更新元素),那么您必须返回 LIST|MAP|SET 等的零元素具体实现。

于 2012-06-21T15:01:20.733 回答