相关疑难解决方法(0)

每个'循环的Java'如何工作?

考虑:

List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
Run Code Online (Sandbox Code Playgroud)
for (String item : someList) {
    System.out.println(item);
}
Run Code Online (Sandbox Code Playgroud)

如果for不使用for each语法,等效循环会是什么样的?

java foreach syntactic-sugar

1446
推荐指数
25
解决办法
252万
查看次数

如何显示方法是否可以返回null

在发布这个问题并阅读那个问题,我意识到知道一个方法是否应该返回null是非常重要的,或者如果这被认为是错误条件并且应该抛出异常.还有一个很好的讨论,何时返回'null'或抛出异常.

我正在写一个方法,我已经知道如果我想返回null或抛出异常,表达我的决定的最佳方式是什么,换句话说,记录我的合同?

我能想到的一些方法:

  • 在规格/文档中写下来(任何人都会阅读它吗?)
  • 使它成为方法名称的一部分(正如我在这里建议的那样)
  • 假设抛出异常的每个方法都不会返回null,并且每个执行'not'抛出的方法都可能返回null.

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

为什么没有这样的东西:

public notnull Object methodWhichCannotReturnNull(int i) throws Exception
{
    return null; // this would lead to a compiler error!
}
Run Code Online (Sandbox Code Playgroud)

总结和结论

表达合同的方式有很多种:

  • 如果您的IDE支持它(作为IntelliJ),最好使用注释,@NotNull因为它对程序员可见,并且可用于自动编译时检查.Eclipse有一个插件可以添加对这些的支持,但它对我不起作用.
  • 如果这些不是一个选项,请使用类似Option<T>或的自定义类型NotNull<T>,这样可以增加清晰度并至少提高运行时检查.
  • 无论如何,在JavaDoc中记录合同永远不会伤害,有时甚至会有所帮助.
  • 除了我之外,没有人提出使用方法名来记录返回值的可空性,虽然它可能非常详细而且并不总是有用,但我仍然认为它有时也有其优点.

java null design-by-contract

45
推荐指数
2
解决办法
3万
查看次数