使用Object数组调用Groovy闭包触发异常的原因解析
调用失败根本原因
两类场景触发相同报错的核心原因,是Groovy闭包的参数分发规则和常规Java可变参数的默认处理逻辑存在差异:
- 闭包的
call(Object... args)方法不会对传入的单个数组类型参数做自动展开。示例中定义的闭包明确要求接收3个独立形参,当直接传入Object[]类型数组时,Groovy会将整个数组识别为1个单独入参,而非拆分为3个和形参一一对应的独立值,最终因传入参数数量和闭包期望的参数数量不匹配,抛出方法签名不匹配的MissingMethodException。 - 自定义可变参数方法
myVarargsFunction中获取到的args本身就是Object[]类型,直接传入闭包时和传入预初始化数组的逻辑完全一致:Groovy不会自动拆分数组,依然仅识别到1个入参,因此会触发完全相同的错误。
官方文档提到的
call方法“支持传入单个值或值列表”,指的是该方法本身支持传入0到N个离散的独立参数,而非支持自动将传入的单个数组识别为匹配闭包形参的参数列表。
内容的提问来源于stack exchange,提问作者Bradley Bergstrom
相关产品推荐
相关产品推荐

