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) 在这个级别上担心性能问题是不明智的,除非分析表明这个方法正是造成性能问题的真正源头;
2) 对于不返回任何元素的调用,每次都返回一个零长度数组是有可能的,因为零长度的数组是不可变的,而不可变对象有可能被自由的共享。

因此,可以返回零长度的集合如下:

public List<UserBean> getUserBeanModify(){
    if(UserList.isEmpty()){
        return Collections.emptyList();
    }else{
        return UserList;
    }
}

综上,需注意的是,返回类型为数组或集合的方法没理由返回null,而是返回一个零长度的数组或者集合。

时间: 2024-08-07 04:10:47

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

返回零长度的数组或者集合,而不是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

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

<<Effective Java>> 第四十三条:返回零长度的数组或者集合,而不是null 如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面, 我们也应该放回一个零长度的数组或者集合,而不是返回null.如果返回了null,客户端程序员就要检测返回的是不是null,然后才能 进行下一步操作,否则就会引发NullPointException.但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发 空指针

第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

改善java程序的151个建议--数组和集合

60.性能考虑,数组是首选,在基本类型处理方面,数组还是占优势的,而且集合类的底层也都是通过数组实现,建议在性能要求较高的场景中使用数组替代集合. 61.如果有必要,使用变长数组:我们可以通过对数组扩容"婉转"地解决数组扩容问题,下面采用的是Arrays数组工具类的copyOf方法,产生了一个newLen长度的新数组,并把原有的值拷贝了进去,之后就可以对超长的元素进行赋值了 62.警惕数组的浅拷贝 Person[] p=new Person[5]; Person[] p2=Arrays

Effective Java 第三版——23. 优先使用类层次而不是标签类

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 23. 优先使用类层次而不是标签类 有时你可能会碰到一个类,它的实例有两个或更多的风格,并且包含一个标签属性(tag field),表示实例的风格. 例如,考虑这个类,它可

零长度的数组【转】

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

Effective java经验之谈,枚举,注解,方法,通用设计,异常

这几章看的比较快,内容就如同标题一样比较容易理解,所以只有部分内容会在[]中解释,其他的就直接理解标题,并不影响阅读质量. 不过如果时间充足的话,还是仔细读一读原书的内容,相信还是有所收获的.主要最近自己想进入算法与机器学习部分,尽快结束这本书. 另一方面,讨论一些自己感兴趣的内容,我会将搞过的东西总结下.后面可能写一部分关于java字节码阅读以及编写的东西.只所以这么来, 是因为字节码编程还是非常用途实际的,这一"java编译语言"使得String与StringBuilder的性能对

Effective java 中文版本阅读总结

点击链接查看云笔记原文 花了半天时间,贪婪的啃读了Effective java 这本书(虽然闻名已久,但是很少看书) 翻着翻着就有种废寝忘食的感觉,下班了都留下来专门看书,后来索性带回家看了. 以下是内容总结,主要是对个人感觉有用的,有很大部分没有提及,因为水平有限,还没有来得及消化 1 引言 2 创建和销毁对象 # 静态工厂方法由于构造器 Boolean.valueOf(String); 几乎总是优于构造器Boolean(String);构造器每次调用的时候都会创建一个新的对象 * 对象创建比