目录
问题
根因及解决
问题
今天线上的计算脚本报了个问题,报警如下是 groovy 运行时异常。调用方法 org.springframework.util.CollectionUtils#isEmpty 出现了异常。异常原因是由于方法重载造成了歧义。无法确定如何调用方法 [null],因为它同时匹配了如下两个方法原型:
- [接口 java.util.Collection]
- [接口 java.util.Map]
groovy.lang.GroovyRuntimeException:Ambiguous method overloading for method org.springframework.util.CollectionUtils#isEmpty. Cannot resolve which method to invoke for [null] due to overlapping prototypes between: \t[interface java.util.Collection] \t[interface java.util.Map]
根因及解决
问题代码如下,截图Java代码返回值定义的是List,但是在做了一些列判断之后若没有符合条件的数据返回null。
这个报错是因为调用org.springframework.util.CollectionUtils#isEmpty
方法时,传入的参数为null
,而CollectionUtils#isEmpty
方法有两个重载方法,一个是接收Collection<?>
参数的,另一个是接收Map<?, ?>
参数的。由于传入的参数为null
,无法确定应该调用哪个重载方法,因此出现了重载方法模糊的异常。解决这个报错的方法是提供一个非空的参数,以明确调用哪个重载方法。
return CollectionUtils.isEmpty(result) ? Lists.newArrayList() : result;