将 String 转换为 String[] 在变量定义或用作函数参数时会产生不同的结果

Converting a String to a String[] yields different results when used in variable definition or as function parameters

提问人:X. Poirot 提问时间:11/9/2023 更新时间:11/9/2023 访问量:28

问:

我正在尝试在Groovy中实现一个小函数,将String数组作为输入并以YAML格式打印。

Groovy 似乎以不同的方式将 String 变量转换为 String[],无论是在变量定义中还是在函数参数的定义中。

这种奇怪的行为通过以下代码片段显示:

// #1
println '#1'
def h = 'one'
println h.class
String[] a = h
println a.class
println a.length
println a

// #2
println '#2'
String f(String[] param) {
  println param.class
  println param.length
  println param
}
f(h)

使用 Groovy 2.4.16 运行:

#1
class java.lang.String
class [Ljava.lang.String;
3
[o, n, e]
#2
class [Ljava.lang.String;
1
[one]

我已经搜索了Groovy规范,但没有找到任何解释这种行为的内容。

有没有人解释为什么:

  • 在变量定义中将 String 传递给 String[] 变量会将 String 拆分为其各个字符,
  • 而将 String 传递给需要 String[] 参数的函数将使用给定的字符串创建一个大小为 1 的数组?

我本来以为这两种情况都会产生相同的结果。

数组字符串 groovy

评论


答:

0赞 cfrick 11/9/2023 #1

第二部分根本不是胁迫/铸造;您正在使用可变参数 像 Java(语言)一样的参数,底层 JVM 具有 没有数组的概念,并且始终使用数组。

第一部分大致是通过以下方式将投射到阵列 列表

评论

0赞 X. Poirot 11/10/2023
谢谢!有了这个提示,我也可以在文档中找到它。我将链接到 Groovy 文档以供参考:groovy-lang.org/objectorientation.html#_varargs