返回零长度的数组或者集合,而不是null

<<Effective Java>> 第四十三条:返回零长度的数组或者集合,而不是null

如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面,

我们也应该放回一个零长度的数组或者集合,而不是返回null。如果返回了null,客户端程序员就要检测返回的是不是null,然后才能

进行下一步操作,否则就会引发NullPointException。但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发

空指针异常,我们可以根据代码的行为和表现,来判断数组和集合是不是为空。

在Collections中有专门针对List,Set,Map的空的实现。如:

Collections.emptyList()

Collections.emptySet();

Collections.emptyMap();

在返回这些集合的方法中,尽量不要返回空值,避免NullPointerException。而就尽量返回非空值,这时候上面

所示的三个空(不是null)集合就有用武之地了,可以使用它们。

如在某方法中这样做:

publci List<String> getInterests(){

if(interests == null){

return Collections.emptyList();

}

return interests;

}

同理,针对需要返回数组的方法,也没必要返回空数组。可以用new int[0]之类的长度为0的数组的来替代。这样也可以避免返回空值。

返回字符串的方法是不是也应该返回一个空串呢?

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 12:53:10

返回零长度的数组或者集合,而不是null的相关文章

Effective Java 之-----返回零长度的数组或集合而不是null

如下代码,通常用户列表为空时,会习惯性返回null,因为这时会认为:null返回值比零长度数组更好,因为它避免了分配数组所需要的开销. private final List<UserBean> UserList = null; public List<UserBean> getUserBean(){ if(UserList.size() == 0){ return null; }else{ return UserList; } } 但这种观点是站不住脚的,原因如下: 1) 在这个级

返回零长度的数组或者集合,而不是null——Effective Java 读书笔记

/** * 返回零长度的数组或者集合,而不是null * * @author 刘向峰 * */ public class Shop { private List<Object> objectList; // 零长度数组常量被传递给toArray方法,以指明所期望的返回类型 private final static Object[] EMPTY_OBJECT_ARRAY = new Object[0]; public Shop(List<Object> objectList) { s

第43条:返回零长度的数组或者集合,而不是null

private final List<Cheese> cheesesInStock = ...; public Cheese[] getCheese() { if(cheesesInStock.size() == 0) return null; ... } 如果返回null, 在客户端处理代码就需要有额外的代码来处理null返回值: Cheese[] cheeses = shop.getCheeses(); if(cheeses != null && Arrays.asList

第七章:方法。ITEM43:返回零长度的数组或者集合,而不是null 。

1 private final List<String> l = ... ; 2 3 public String[] getString() { 4 if(l.size() == 0) 5 return null ; 6 } 7 8 String[] s = getString(); 9 //对于一个返回null而不是零长度数组或者集合的方法,每次都要判断!=null 10 if(s != null && Arrays.asList(s).contains("a&qu

零长度的数组【转】

原文链接:http://www.cnblogs.com/dolphin0520/p/3752492.html 在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNU C中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0];很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在这儿,它表示的完全是另外的一层意思,这个特性是不可移植的,所以,如果你致力于编写可移植,或者是稍稍需要跨平台的代码,这些Trick最好还是收起来的好. 在GNU的指南中,它是如此写道: st

【代码优化】返回0长度数组或者集合

改掉你从C语言继承过来的习惯,我们在java中没理由返回类型为数组或者集合返回null. private final List<Cheese> InStock =...; public Cheese[] getCheeses() { if( InStock.size() ==0){ return null; } } 这种是我们经常使用的 返回的模式,这就带来在应用Cheese数组的时候 都需要判断数组是否为null. Cheese[] cheeses= shop.getCheeses(); i

读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

原文链接:C语言结构体里的成员数组和指针 复制如下: 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>

关于零长度数组

声明:本文主要转载了http://coolshell.cn/articles/11377.html文章中关于 "零长度数组的内容",在此对原作者表示感谢 1. 前言 首先,我们要知道,0长度的数组在ISO C和C++的规格说明书中是不允许的.这也就是为什么在VC++2012下编译你会得到一个警告:"arning C4200: 使用了非标准扩展 : 结构/联合中的零大小数组". 那么为什么gcc可以通过而连一个警告都没有?那是因为gcc 为了预先支持C99的这种玩法,

流程控制与数组、集合

1.流程图 流程图中的形状: (椭圆形)开始和结束:表示程序的开始或结束,一个流程图中,只能出现一个开始和一个结束 (矩形)步骤:表示功能中的每一个步骤 (平行四边形)输入和输出:表示输入和输出 (菱形)判断:表示判断,将产生两种判断结果,真或假 (箭头):连接其他图形,表示程序的流向 2.流程控制语句: ①if判断 ②switch选择 ③循环:while循环        do while循环        for循环        foreach循环 3.数组默认值: 数字类型,默认值为0b