在这种情况下,为什么我在 Groovy 中没有得到 NullPointerException?
我有这个测试代码:
def test = null
test.each { }
为什么我没有得到任何异常?
I have this test code:
def test = null
test.each { }
Why don't I get any exception?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
each
的实现尝试以空安全方式调用其目标的iterator
方法。如果在空对象或没有迭代器方法的对象上调用each,则不会发生任何事情。我还没有看到源代码,但它可能看起来像这样
§ § 实际上,这个方法可能是用 Java 而不是 Groovy 编写的
The implementation of
each
tries to call theiterator
method of it's target in a null-safe fashion. Ifeach
is called on a null object, or an object without aniterator
method, nothing happens.I haven't seen the source code, but it could look something like this§
§ In reality, this method is probably written in Java rather than Groovy
使用each闭包时的空值与具有0个元素的集合相同。如果你有代码
print 语句将不会执行。如果将测试更改为,
您将得到输出。
A null value when using the each closure is the same as a collection with 0 elements. If you have the code
The print statement won't execute. If you change test to
you will get output.