Groovy中字符串转String[]:变量定义与函数参数行为差异原因咨询
Groovy中字符串转String[]的两种不同行为解析
在实现一个接收String[]输入并打印YAML格式的Groovy函数时,发现字符串转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在变量赋值的类型转换中,会使用as操作符的默认转换规则。对于String转String[],Groovy会将字符串视为CharSequence,默认转换逻辑是把字符串的每个字符单独提取出来,组成一个String[]数组(每个元素是单个字符的字符串)。函数参数传递时生成单元素数组的原因:
Groovy为简化方法调用提供了参数自动适配的语法糖。当调用声明为接收数组类型参数的方法时,如果传入单个对象,Groovy会自动将该对象包装成仅包含此对象的单元素数组。这个设计是为了让开发者无需手动创建数组,直接传递单个元素即可调用期望数组参数的方法。
内容的提问来源于stack exchange,提问作者X. Poirot
相关产品推荐
相关产品推荐

