5
在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)
}
,這將拋出一個NullPointerException
如果我叫items(null)
但正常工作,如果我只是說items()
。爲了使這個工作正確,我必須將行改爲new HashSet<>(items ?: [])
,這又似乎違背了具有默認方法參數值的整個目的。
我在這裏錯過了什麼?
這使得總體感覺。感謝並感謝鏈接到其他帖子。那麼使用Elvis算子的正確答案是什麼? – icfantv
是的。我認爲elvis是很好的解決方案。 – Will
@icfantv,如果你不喜歡這種重複,那麼使用null作爲默認參數,elvis +你想要的值。 – cfrick