W Groovy, jeśli mam:Stosowanie domyślnej metody Groovy wartość parametru podczas przechodzenia zerowy
def say(msg = 'Hello', name = 'world') {
"$msg $name!"
}
a następnie zadzwonić:
say() // Hello world!
say("hi") // Hi world!
say(null) // null world!
Dlaczego ostatni zaczyna interpretować dosłownie jako null
i niestosowania wartość domyślna? Czy nie jest to sprzeczne z celem domyślnych wartości argumentów metody? Dostaję, że przechodzenie od null
różni się od nieprzesyłania niczego z/r/t długości argumentu.
Moim problemem jest to, że jeśli teraz mam metodę, która pobiera kolekcję jako argument:
def items(Set<String> items = []) {
new HashSet<>(items)
}
Ten rzuci NullPointerException
jeśli zadzwonię items(null)
ale działa dobrze, jeśli po prostu powiedzieć items()
. Aby to zadziałało poprawnie, muszę zmienić linię na new HashSet<>(items ?: [])
, która, jak się wydaje, pokonuje cały cel posiadania domyślnych wartości argumentów metod.
Czego mi tu brakuje?
To ma sens. Dziękuję i dziękuję za link do drugiego postu. Czy więc prawidłową odpowiedzią jest użycie operatora Elvisa? – icfantv
Tak. Myślę, że elvis to dobre rozwiązanie. – Will
@icfantv i jeśli nie podoba ci się duplikowanie, użyj null jako domyślnego parametru i elvis + wartość, którą chcesz hav.e – cfrick