如何显示方法是否可能返回 null
在发布这个问题并阅读了这个问题之后,我意识到知道一个方法是否应该返回null非常重要,或者这是否被认为是一个错误条件,并且应该引发异常。还有一个很好的讨论,何时返回“null”或抛出异常。
我正在编写一个方法,并且我已经知道我是否要返回 null 或引发异常,表达我的决定的最佳方式是什么,换句话说,记录我的合约?
我能想到的一些方法:
- 把它写在规格/文档中(有人会读它吗?
- 使其成为方法名称的一部分(正如我在此处建议的那样))
- 假设每个引发异常的方法都不会返回 null,并且每个不“不”引发的方法都可能返回 null。
我主要在谈论java,但它也可能适用于其他语言:为什么有一种正式的方法来表达是否会抛出异常(关键字),但没有正式的方式来表达是否可以返回null?throws
为什么没有这样的东西:
public notnull Object methodWhichCannotReturnNull(int i) throws Exception
{
return null; // this would lead to a compiler error!
}
总结和结论
表达合同的方式有很多种:
- 如果您的IDE支持它(如IntelliJ),则最好使用这样的注释,因为它对程序员是可见的,并且可以用于自动编译时检查。Eclipse有一个插件可以添加对这些的支持,但它对我不起作用。
@NotNull
- 如果这些不是一个选项,请使用自定义类型,如 或 ,这增加了清晰度,至少增加了运行时检查。
Option<T>
NotNull<T>
- 无论如何,在JavaDoc中记录合同永远不会受到伤害,有时甚至会有所帮助。
- 使用方法名称来记录返回值的可空性不是由任何人提出的,除了我之外,没有人提出,尽管它可能非常冗长并且并不总是有用,但我仍然相信有时它也有其优点。