这是一个普遍的问题(但是我正在使用C#),最好的方法是什么(最佳实践),对于以集合为返回类型的方法,您是否返回null或空集合?

#1楼

我想在这里举例说明。

在这里考虑一个案例。

int totalValue = MySession.ListCustomerAccounts()

.FindAll(ac => ac.AccountHead.AccountHeadID

== accountHead.AccountHeadID)

.Sum(account => account.AccountValue);

在这里考虑我正在使用的功能..

1. ListCustomerAccounts() // User Defined

2. FindAll() // Pre-defined Library Function

我可以轻松地使用ListCustomerAccount和FindAll代替。

int totalValue = 0;

List custAccounts = ListCustomerAccounts();

if(custAccounts !=null ){

List custAccountsFiltered =

custAccounts.FindAll(ac => ac.AccountHead.AccountHeadID

== accountHead.AccountHeadID );

if(custAccountsFiltered != null)

totalValue = custAccountsFiltered.Sum(account =>

account.AccountValue).ToString();

}

注意:由于AccountValue不为null ,所以Sum()函数将不会返回null 。,因此我可以直接使用它。

#2楼

空集合。 总是。

这很烂:

if(myInstance.CollectionProperty != null)

{

foreach(var item in myInstance.CollectionProperty)

/* arrgh */

}

最好的做法是在返回集合或可枚举null时永远不要返回null 。 总是返回一个空的可枚举/集合。 它可以防止上述的废话,并防止您的汽车被班上的同事和用户所困扰。

在谈论属性时,请始终设置一次属性,然后忘记它

public List Foos {public get; private set;}

public Bar() { Foos = new List(); }

在.NET 4.6.1中,您可以将其压缩得很多:

public List Foos { get; } = new List();

当谈论返回可枚举的方法时,您可以轻松地返回一个空的可枚举而不是null 。

public IEnumerable GetMyFoos()

{

return InnerGetFoos() ?? Enumerable.Empty();

}

使用Enumerable.Empty()可以被认为比返回例如新的空集合或数组更有效。

#3楼

返回null可能更有效,因为不会创建新对象。 但是,它通常也需要进行null检查(或异常处理)。

从语义上讲, null和空列表并不意味着同一件事。 差异是细微的,在特定情况下,一种选择可能会比另一种更好。

无论您选择哪种方式,都要记录在案,以免造成混淆。

#4楼

取决于您的合同和具体情况 。 通常,最好返回空集合 ,但有时( 很少 ):

null可能意味着更具体;

您的API(合同)可能会迫使您返回null 。

一些具体的例子:

一个UI组件(来自控件之外的库),如果传递了一个空集合,则可能正在呈现一个空表,如果传递了null,则可能根本没有表。

在Object-to-XML(JSON / whatever)中,其中null表示元素丢失,而空集合则表示冗余(可能不正确)

您正在使用或实现一个API,该API明确指出应返回/传递null

#5楼

如果一个空集合在语义上有意义,那就是我希望返回的内容。 为GetMessagesInMyInbox()返回空集合将传达“您的收件箱中确实没有任何消息”,而返回null可能对传达可用数据不足以说明可能返回的列表应该是什么样子很有用。

java返回空集合对象_返回null或空集合更好吗?相关推荐

  1. 传递集合对象_面试必备——Java集合框架

    Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...

  2. Java 判断实体类对象的全部属性是否空

    代码: public boolean checkObjAllFieldsIsNull(Object object) {// 如果对象为null直接返回trueif (null == object) { ...

  3. java流式传输对象_使用Java 8在地图上流式传输

    java流式传输对象 在本文中,我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流,并将Stream接口扩展为MapStream! 即使在复杂的情况下,此添加将 ...

  4. jaxb list集合对象_JAXB –表示空集合和空集合

    jaxb list集合对象 示范代码 以下演示代码将用于Java模型的所有不同版本. 它只是将一个集合设置为null,第二个设置为空列表,第三个设置为填充列表. package package blo ...

  5. java迭代器不能修改集合值_关于使用迭代器对集合进行遍历时,不能对集合进行修改的论证...

    关于使用迭代器对集合进行遍历时,不能对集合进行修改的论证## 标题 ## 摘要:迭代器再帮助我们进行对集合的元素进行遍历提供了有效的方法,java采用迭代器模式能在不暴露集合对象内部元素的情况下,对元 ...

  6. java get null_java 获取对象中为null的字段实例代码

    下面一段简单的代码给大家分享java 获取对象中为null的字段,具体代码如下所述: private static String[] getNullPropertyNames(Object sourc ...

  7. 物联网空开价格_智慧物联网远程空开断路器

    智慧物联网远程空开断路器基本介绍 一.曼顿智慧物联网空开是全****台智慧物联网空开,是硬件与软件的**组合.曼顿产品用在电路中可以全数据(电流,温度,电压,功率,电量)实时监控,全故障(打火,漏电, ...

  8. java 不可修改的集合对象_[改善Java代码]asList方法产生的List对象不可更改

    上一个建议之处了asList方法在转换基本类型数组时候存在的问题,在看下asList方法返回的列表有何特殊的地方.看代码: importjava.util.Arrays;importjava.util ...

  9. java null 转空_java 对象属性为 null 值转为 空串

    相信大家一定在开发中见过并且写过类似这样的代码: public Book getBook(int id) { if (id < 0) { return null; } return new Bo ...

最新文章

  1. 计算机网络人民邮电出版社答案,计算机网络基础 人民邮电 龚娟 第4章习题答案...
  2. 属性与意图识别_解密宝能汽车智能驾舱的“未来属性”
  3. 奥运年08/07/19我正式加入博客园,开始.net的新征程^-^
  4. 程序员:最绝望的面试代码写了4个小时,就是不运行!最终收到15K的offer
  5. 调整样式_2019年4月1日起,内河船船员适任证书样式调整成这样啦~
  6. python文件的读取与写入_python中文件的读取与写入以及os模块
  7. 网络电话全民亲情祝福 中秋团圆新方式
  8. centos8 安装mysql_Centos 离线安装mysql8(以及在线安装)
  9. oracle asm查看大小,Oracle ASM查看信息
  10. Saliency Detection: A Spectral Residual Approach
  11. 数据结构之一元多项式相加
  12. 本题要求实现一个计算非负整数阶乘的简单函数
  13. egg-socket-io的demo案例
  14. nltk学习之统计词频和分词nltk.word_tokenize nltk.FreqDist
  15. TMS320C6678开发笔记---IBL编译与分析3
  16. linux系统 如何选择题,Linux认证考试练习题
  17. STL中的for_each()函数
  18. 从本子文件名中提取本子的名字
  19. 【C语言编程1】删除数组中重复元素,并排序
  20. 数据库中@代表什么意思

热门文章

  1. mysql视图应用_MySQL视图的概念与实际应用
  2. mac bochs 调试linux,Mac OS X下编译安装带debugger的bochs
  3. go 计算文件sha-256_Kubernetes入门实践--部署运行Go项目
  4. nginx windows启动停止_Nginx之3抛砖引玉 - (目录索引)
  5. 定义空列表元素类型_【Python+Excel】做数据分析5--列表和元组读取和常用查询
  6. 管家婆7.2集合最新打印管理器_链接海内外企业用户丨管家婆分销ERP繁体版/英文版...
  7. mysql命令行操作大全_mysql命令行操作大全 mysql命令行操作总结
  8. ads s参数拟合_数据分析--拟合
  9. ntp同步 mysql_解析Mysql 主从同步延迟原理及解决方案
  10. iic总线从机仲裁_总线-IIC-SPI