Google Guava isNullOrEmpty for collections

2022-08-31 09:46:40

我看到番石榴有字符串的isNullOrEmpty实用程序方法

Strings.isNullOrEmpty(str)

对于列表,我们有什么类似的东西吗?类似的东西

Lists.isNullOrEmpty(list)

这应该等同于

list == null || list.isEmpty()

另外,对于数组,我们有什么类似的东西吗?类似的东西

Arrays.isNullOrEmpty(arr)

这应该等同于

arr == null || arr.length == 0

答案 1

不,这种方法在番石榴中并不存在,实际上在我们的“思想墓地”中。

我们不认为“是空的或空的”是你真正想要问的关于集合的问题。

如果一个集合可能是 null,并且 null 应该被视为空,那么请预先消除所有歧义,如下所示:

Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
  foos = ImmutableSet.of();
}

或者像这样(如果你愿意):

Set<Foo> foos = MoreObjects.firstNonNull(
    NaughtyClass.getFoos(), ImmutableSet.<Foo>of());

之后,您可以像往常一样使用。在调用淘气的API后立即执行此操作,并且您已经将怪异抛在脑后,而不是让它无限期地继续。.isEmpty()

如果“null”(真正意味着空集合)没有返回给你,而是传递给你,那么你的工作就很简单:只要抛出一个,然后让那个调用者成形。NullPointerException


答案 2

在整个番石榴中,你往往会发现一件事,那就是他们往往对s非常敌对。作者希望阻止您尽可能多地使用,并且提供实用方法以使其更易于使用将适得其反。nullnullnull

如果你想使用番石榴的范式,请考虑这个集合(或数组)的源是否真的应该选择性地返回。如果没有,请考虑对其进行标记并返回空集合而不是 。或者,作为不需要 -value 列表的函数的参数,请考虑使用 ,如果 (意外) 传入 ,则会引发异常。null@NonNullnullnullPreconditions.checkNotNullnull

如果真的是合法的,就没那么难了。nulllist == null || list.isEmpty()


推荐