如何显示一个方法是否可能返回null

21 浏览
0 Comments

如何显示一个方法是否可能返回null

在发布这个问题并阅读那个问题之后,我意识到了知道一个方法是否应返回null,或者是否将其视为错误条件并抛出异常非常重要。关于何时返回“null”或抛出异常也有一个很好的讨论。我正在编写一个方法,我已经知道我想要返回null还是抛出异常,有什么最好的方法来表达我的决定,换句话说,如何说明我的契约?我能想到的一些方式包括:

  • 在规范/文档中写下来(会有人读吗?)
  • 将其作为方法名的一部分(如我在这里建议的这里
  • 假设每个抛出异常的方法都不会返回null,每个不抛出异常的方法可能返回null。

我主要谈论的是Java,但这也可能适用于其他语言:为什么有一种正式的方式来表达是否会抛出异常(使用“throws”关键字),但没有一种正式的方式来表达是否可能返回null呢?

为什么没有像这样的东西:

public notnull Object methodWhichCannotReturnNull(int i) throws Exception
{
    return null; // 这将导致编译错误!
}

总结和结论

有许多表达契约的方式:

  • 如果您的IDE支持(如IntelliJ),最好使用像@NotNull这样的注解,因为它对程序员可见,并可用于自动的编译时检查。有一个用于Eclipse的插件来支持这些,但对我来说没有起作用。
  • 如果这些选项不可用,则使用自定义类型,例如OptionNotNull,这样可以增加清晰度并至少进行运行时检查。
  • 无论如何,将契约记录在JavaDoc中从不会有害,有时甚至会有帮助。
  • 使用方法名来记录返回值的可为null性不是任何人提出的建议,尽管它可能非常冗长且不总是有用,但我仍然相信有时它也有其优势。
0