Mar*_*olo 3 preconditions guava java-8
我有一个对象 myObject 并且我想确保它为空,否则我想用该对象的 id 打印一条自定义消息。我有以下代码行试图实现相同的
Preconditions.checkArgument(Objects.isNull(myObject),
"This object is not null #%s.", myObject.getId());
Run Code Online (Sandbox Code Playgroud)
当 myObject 不为空时,此条件工作正常。它抛出适当的异常消息。但是当对象确实为空时,我期望其余的代码将被执行,但由于 myObject.getId() 调用,我得到了一个空指针异常。
无论条件是否为真,番石榴前提条件都会评估异常消息字符串吗?
和
Preconditions.checkArgument(Objects.isNull(myObject),
"This object is not null #%s.", myObject.getId());
Run Code Online (Sandbox Code Playgroud)
你必须看看发生了什么顺序:
在任何调用checkArgument()可以发生之前,它的所有参数都会被评估:
Objects.isNull(myObject)myObject.getId()只有这样调用才能发生,如果在此评估期间发生异常,则调用不会首先发生。
只是为了完整性,正如在其他地方已经提到的那样:要走的路是myObject == null ? null: myObject.getId(),因为它避免了在null对象的情况下取消引用。
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |