将空集合优先于null是一个基本的java原则,它源于Effective java Item 43:返回空数组或集合,而不是null。有几个理由支持它:
Using and avoiding nulls在guava文档中有概述,但如果您查看了人们不遵守此规则的代码,它很快就会变得难看。不仅要处理NullPointerException
,还要处理必须维护的冗长和额外代码。我在代码评审期间看到的几个示例:
List<String> someList = ...
if (someList != null && someList.size() > 0) {}
if (someList != null) {
if (someList.isEmpty()){
}
}
if (BooleanUtils.isTrue(someDomainObject.getSomeValue())) {}
if(StringUtils.isNotBlank(“some value”)){}
if(StringUtils.isBlank(“some value”)){}
实际上,每次返回空集合时,都应该返回相同的不可变空集合。我们将示例放在一起以供参考,返回空列表、返回空Map、返回空集、返回空枚举、返回空列表迭代器、返回空迭代器,返回空排序集和返回空排序Map。为了创建代码的一致性和可维护性,Guava和Apache实现了一种类似的方法来返回空列表。让我们看看返回空列表:
@Test
public void return_empty_list_java () {
List<String> emptyList = Collections.emptyList();
assertTrue(emptyList.isEmpty());
}
@Test
public void return_empty_list_guava () {
List<String> emptyList = ImmutableList.of();
assertTrue(emptyList.isEmpty());
}
@Test
public void return_empty_list_apache_commons () {
@SuppressWarnings("unchecked")
List<String> emptyList = ListUtils.EMPTY_LIST;
assertTrue(emptyList.isEmpty());
}
目标是尽快处理从空到空的集合,并且没有理由编写返回集合或数组以返回空的方法。有时您会遇到一个返回null的方法,正确的做法是修复它,不要偷懒。由于大多数公司都没有一个专门负责重构代码的团队,没有一个有良好文档记录的代码库,也没有一个完全支持代码质量的管理人员,因此有几种方法可以处理它。
DomainObject domain = null;
List<String> strings;
if (domain != null && domain.getStrings() > 0) {
strings = domain.getStrings();
} else {
strings = Collections.emptyList();
}
DomainObject domain = null;
List<String> strings = Objects.firstNonNull(domain.getString(),
ImmutableList.<String>of());
...
型
DomainObject domain = null;
List<String> strings;
if (CollectionUtils.isEmpty(domain.getStrings())) {
strings = domain.getStrings();
} else {
strings = ListUtils.EMPTY_LIST;
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.leveluplunch.com/blog/2014/02/19/return-empty-collection-set-list-map-instead-null/
内容来源于网络,如有侵权,请联系作者删除!