Calling Java Apache StringUtils.join() from Groovy



我正试图从Groovy类中调用Apache Commons StringUtils.join()方法。我想连接3个字符串(part1part2part3)。

为什么不起作用?

def path = StringUtils.join([part1, part2, part3]) //1

但以下线路有效:

def path = StringUtils.join([part1, part2, part3] as String[]) //2

后续问题。为什么这样做?我使用的是StringUtils v2.6,所以它没有varargs方法。groovy总是将方法参数转换为数组吗?

def path = StringUtils.join(part1, part2, part3)  //3

这在很大程度上是一个令人好奇的问题。我不会使用StringUtils,因为我昨天发布了一个单独的问题,并找到了更好的解决方案。然而,我仍然想理解为什么技术#1不起作用,而技术#3起作用。

因此,为了显示正在发生的事情,让我们编写一个脚本并显示我们得到的输出:

@Grab( 'commons-lang:commons-lang:2.6' )
import org.apache.commons.lang.StringUtils
def (part1,part2,part3) = [ 'one', 'two', 'three' ]
def path = StringUtils.join( [ part1, part2, part3 ] )
println "1) $path"
path = StringUtils.join( [ part1, part2, part3 ] as String[] )
println "2) $path"
path = StringUtils.join( part1, part2, part3 )
println "3) $path"

此打印:

1) [one, two, three]
2) onetwothree
3) onetwothree

基本上,方法调用中唯一与StringUtils类中的签名匹配的是2),因为它与Object[]方法定义匹配。对于另外两个,Groovy正在为您的方法调用选择可以找到的最佳匹配。

对于1)3),它都在做同样的事情。将参数封装为Object[]并调用与2) 相同的方法

对于3),这是可以的,因为您得到了一个具有3个元素的Object[],但对于1),您得到了具有一个元素的Object[];您的List

使用List参数的一种方法是使用如下排列运算符:

path = StringUtils.join( *[ part1, part2, part3 ] )
println "4) $path"

然后打印:

4) onetwothree

正如预期的那样(它会将列表中的所有元素作为单独的参数放入,然后将这些元素放入具有三个元素的Object[]中,如示例3)

相关内容

  • 没有找到相关文章

最新更新