当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《传递null时应用默认的groovy方法参数值》经验,为你挑选了1个好方法。

在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 items = []) {
  new HashSet<>(items)
}

如果我只是说,NullPointerException如果我打电话,这将抛出一个items(null)工作正常items().为了使其正常工作,我必须将行更改为,new HashSet<>(items ?: [])这似乎也破坏了具有默认方法参数值的整个目的.

我在这里错过了什么?



1> Will..:

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

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

将生成这两个方法(我javap以前得到这些值):

public java.lang.Object items(java.util.Set);
public java.lang.Object items();

所以当你打电话给items(null)你的时候,实际上是传递了一些价值,并且items(Set)会使用方法.

您还可以参考有关默认参数的此问题.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有