gpt4 book ai didi

groovy - 传递 null 时应用默认的 groovy 方法参数值

转载 作者:行者123 更新时间:2023-12-04 11:03:33 26 4
gpt4 key购买 nike

在 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 ?: [])同样,这似乎违背了使用默认方法参数值的全部目的。

我在这里想念什么?

最佳答案

在 Groovy 中,默认参数会生成重载方法。因此,这:

def items(Set<String> items = []) {
new HashSet<>(items)
}

将生成这两种方法(我使用 javap 来获取这些值):
public java.lang.Object items(java.util.Set<java.lang.String>);
public java.lang.Object items();

所以当你调用 items(null)实际上,您正在传递一些值,并且 items(Set)将使用方法。

也可以引用 this question关于默认参数。

关于groovy - 传递 null 时应用默认的 groovy 方法参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34359992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com