因为您可以这样做使事情变得 明确 。喜欢:
public class Foo { private final Bar bar; public Foo(Bar bar) { Objects.requireNonNull(bar, "bar must not be null"); this.bar = bar; }或更短:
this.bar = Objects.requireNonNull(bar, "bar must not be null");
现在您 知道了 :
- 当 成功使用创建Foo对象时
new()
- 则 保证* 其 bar 字段为非空。 *
比较一下:今天创建一个Foo对象, 明天 创建一个使用该字段并引发的方法。最有可能的是,明天您将不知道为什么 昨天
将该引用传递给构造函数时,该引用为空!
换句话说:通过显式使用此方法检查 传入的 引用,您可以 控制 引发异常的时间点。而且在大多数情况下,您想尽快 失败 !
主要优点是:
- 如前所述, 控制 行为
- 调试更容易-因为您在创建对象的上下文中抛出错误。在某个时间点,您很有可能日志/跟踪记录会告诉您出了什么问题!
- 如上所示:这个想法的真正力量与 最终 领域一起展现。因为现在您的课程中的 任何其他代码 都可以安全地假定它
bar
不是null-因此您不需要if (bar == null)
在其他地方进行任何检查!



