You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy中java.util.LinkedHashMap#leftShift方法重载歧义问题求助

解决LinkedHashMap#leftShift方法重载歧义的Groovy错误

问题重现

我编写了调用API的getInfo方法:

public def getInfo(String A, String B, String C, String D, String E) {
    def response = null;
    def requestHeaders = ['A': A, 'B' : B]
    requestHeaders << headers

    Map uriVariables = [C : C, D : D, start: 1, end: 10, E: E]
    try {
        response = restMethod.get(getInfo, uriVariables, requestHeaders, [:])
        if(!response) {
            return null;
        }
    } catch (e) {
        logger.error("Error getting data", e)
    }
    return response?.data ? response?.data : null
}

同时编写了用于测试的getInfoTest方法:

@CrossOrigin
@RequestMapping(method = RequestMethod.GET, path = '/getInfo')
def getInfoTest(@RequestHeader('A') String A, @RequestHeader('B') String B, @RequestHeader('C') String C, @RequestHeader('D') String D, @RequestHeader('E') String E) {

    infoResponse = InfoRestClient.getInfo(A, B, C, D, E)
    return infoResponse
}

调用时出现以下错误:

groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.util.LinkedHashMap#leftShift.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
    [interface java.util.Map]
    [interface java.util.Map$Entry]

错误原因

错误出在getInfo方法的requestHeaders << headers这一行:
当headers变量的值为null时,Groovy无法确定要调用LinkedHashMap的哪个leftShift重载方法——该类有两个重载的leftShift方法,分别接受Map和Map.Entry类型参数,而null同时匹配这两个类型的参数,导致方法调用歧义。

修复方案

方案1:先判断null再执行合并

在合并headers前先检查其是否为null,避免传入null触发歧义:

def requestHeaders = ['A': A, 'B' : B]
if (headers != null) {
    requestHeaders << headers
}

方案2:使用putAll结合默认空Map

利用Groovy的Elvis操作符,当headers为null时用空Map替代,再通过putAll方法合并(putAll仅接受Map类型参数,不存在重载歧义):

def requestHeaders = ['A': A, 'B' : B]
requestHeaders.putAll(headers ?: [:])

额外说明

你之前怀疑的同名函数问题并非本次错误的原因,错误完全源于headers变量为null时的Map合并操作,调整getInfoTest的参数无法解决该问题,核心是处理getInfo方法中headers的null情况。


内容的提问来源于stack exchange,提问作者jasper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:25:12