锁定老帖子 主题:项目中List的返回值
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-14
在检查的时候,发现方法中对无数据集合类型的返回有2种方式,Null和new List,系统是由很多人开发的,根据代码上看很明显没有对这些细节形成统一的规范,不过也能理解… 随便找人问了问,然后告诉他们以后规范方面尽量统一,至于上面的问题返回null还是创建一个空内容数组,由于系统刚出现内存问题,几乎统一了意见,用null吧… 真是这样吗?创建新对象返回时为了避免客户端代码的空值验证,返回null值是为了减少开销,视乎都有道理。其实个人觉得不应该返回空,当然,这里暂时不考虑业务需要的情况。但内存开销怎么办?无数据集合基本上是不变的,开销应该是很低的,不过还是有两全其美的办法,不知道大家对Collections工具类的empty系列静态方法用的多不多,这些方法返回一个无内容集合,并且都是基于同一个对象实例,这样,就可以避免null值的验证和那一点开销了,建议大家大量使用 举例: public List returnArray2(Object data){ if(data == null){ return Collections.emptyList(); } return (List) data; } 当然还有Collections.emptyMap()、Collections.emptySet(),原理是一样的 另外,也可以选择Collections的静态变量进行返回,其实上述方法中返回的就是下面的Collections中定义的静态变量: public static final List EMPTY_LIST = new EmptyList(); public static final Set EMPTY_SET = new EmptySet(); public static final Map EMPTY_MAP = new EmptyMap(); 在jdk1.5之前的版本使用只能使用静态变量的方式访问,具体可以见jdk源码 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-15
EmptyList的size是几?
|
|
返回顶楼 | |
发表时间:2010-01-15
最后修改:2010-01-15
New对象从来不是问题,问题在于new了没释放,你这里查找内存问题跟返回什么没有关系。
当然,返回null是很差的实践,返回 Collections中的那些预定义空集合是更好的方式,其实就是Null Object模式。 |
|
返回顶楼 | |
发表时间:2010-01-15
Collections学习了。。。。
|
|
返回顶楼 | |
发表时间:2010-01-15
处理方法不妥啊
感觉你还没找到问题根源 只是一个多返回new的操作怕是不会导致系统不堪重负把 看看dump把,先找到根源 |
|
返回顶楼 | |
发表时间:2010-01-15
viei 写道 处理方法不妥啊
感觉你还没找到问题根源 只是一个多返回new的操作怕是不会导致系统不堪重负把 看看dump把,先找到根源 是的,其实是由是由于在解决性能问题的时候偶尔发现了这个问题,所以想和大家交流交流,性能问题是因为有些模块出现严重的内存占用过多,然后启动后做了大量缓存并读取大量配置文件,导致初始内存占用过高引起的 |
|
返回顶楼 | |
发表时间:2010-01-15
Item 43: Return empty arrays or collections, not nulls
public List<Cheese> getCheeseList() { if (cheesesInStock.isEmpty()) return Collections.emptyList(); // Always returns same list else return new ArrayList<Cheese>(cheesesInStock); } from Effective Java : Joshua Bloch |
|
返回顶楼 | |
发表时间:2010-01-16
为什么返回null不好呢?
|
|
返回顶楼 | |
发表时间:2010-01-16
最后修改:2010-01-16
return null 有造成null pointer exception的可能吧...
所以取之前要判断是否为null |
|
返回顶楼 | |
发表时间:2010-01-16
返回一个NULL 没有什么问题。
程序逻辑判断不要出现NULL异常就行。 这不是程序性能的关键点啊/ |
|
返回顶楼 | |