假设您有一个返回日期的函数:
Date myFunc(paramA, paramB){ //conditionally return a date? }
null
从这个函数返回是否合适?这看起来很难看,因为它迫使客户检查null
.
"空对象"模式是解决此问题的实现模式.
我不是null对象模式的忠实粉丝,但是,总是返回一个列表是有意义的,即使它是空的,而不是返回null
.
但是,在Java中,一个空日期将被清除并具有1970年.
这里最好的实施模式是什么?
空对象模式不适用于您要执行的操作.该模式是关于创建一个在其实现中没有功能的对象,您可以将其传递给需要对象不为null的给定函数.一个例子是Eclipse 中的NullProgressMonitor,它是IProgressMonitor的空实现.
如果你返回一个"空"日期,比如1970年,你的客户仍然需要通过查看它是否为1970来检查它是否为"空".如果它们不存在,则会发生错误行为.但是,如果返回null,它们的代码将快速失败,并且它们将知道它们应该检查null.此外,1970年可能是一个有效的日期.
您应该记录您的方法可能返回null,就是这样.
null是完全可以接受的.但是,如果要在错误上返回null,请考虑抛出异常.