【发布时间】:2016-03-25 10:06:07
【问题描述】:
在 Groovy 中,如果我有:
def say(msg = 'Hello', name = 'world') {
"$msg $name!"
}
然后调用:
say() // Hello world!
say("hi") // Hi world!
say(null) // null world!
为什么最后一个被逐字解释为null 而没有应用默认值?这不会破坏默认方法参数值的目的吗?我确实知道传递 null 与不传递任何 w/r/t 参数长度不同。
我的问题是,如果我现在有一个将集合作为参数的方法:
def items(Set<String> items = []) {
new HashSet<>(items)
}
如果我打电话给items(null),这将抛出一个NullPointerException,但如果我只说items(),它就可以正常工作。为了使其正常工作,我必须将行更改为 new HashSet<>(items ?: []),这似乎再次违背了使用默认方法参数值的全部目的。
我在这里错过了什么?
【问题讨论】:
标签: groovy default-value