Groovy模糊方法重载

Hor*_*ass 14 groovy

早上好 - 我看到类似的问题已被问过几次,但它们似乎都是针对编译项目或涉及Gradle的项目.无论如何,我收到了错误

Caused by: javax.script.ScriptException: groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.math.BigDecimal#<init>.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class [C]
[class java.lang.String]
Run Code Online (Sandbox Code Playgroud)

当我运行这个小脚本时

String amt = "1"
String currency = "GBP"
String targetCurrency = "USD"

def settlement = crossCurrencyClient.crossCurrency(amt, currency, targetCurrency)

return transfer.amount * new java.math.BigDecimal (settlement)
Run Code Online (Sandbox Code Playgroud)

这本身就是触发这个

import groovyx.net.http.HTTPBuilder
import groovyx.net.http.RESTClient
import groovy.json.JsonBuilder
import groovy.json.JsonOutput
import static groovyx.net.http.Method.GET
import static groovyx.net.http.ContentType.JSON

public class CrossCurrencyClient {

    def issuingAddress = "rBycsjqxD8RVZP5zrrndiVtJwht7Z457A8"
    String source = "rUR5QVHqFxRa8TSQawc1M6jKj7BvKzbHek" 
    String multiplier = ""
    def resURL = "http://url-string.com/v1/"
    def resourceIdClient = new RESTClient("${resURL}")

    public String generateUUID() {
        def resourceId = resourceIdClient.get(path:"uuid").data.uuid
        println "resourceId = " + resourceId
        return resourceId
        }

    public String crossCurrency(String amt,String currency,String targetCurrency) {

        def http = new HTTPBuilder( "${resURL}accounts/${source}/payments/paths/${source}/${amt}+${targetCurrency}+${issuingAddress}?source_currencies=${currency}+${issuingAddress}" 
)

        http.request(GET,JSON) {

            response.success = { resp, json -> 
                if(json.success){
                    multiplier = json?.source_amount?.value
                }
            }

            response.failure = { resp ->
                println "Request failed with status ${resp.status} and message : ${resp.message}"
                return "Something went wrong"
            }
        }
    return multiplier    
    }
}

CrossCurrencyClient crossCurrencyClient = new CrossCurrencyClient()
Run Code Online (Sandbox Code Playgroud)

我无法解决这里的问题.据我所知,所有方法都正确完成,没有歧义.谁能指出我哪里错了?

Mic*_*l M 12

模糊的方法调用是BigDecimal的构造函数:

Ambiguous method overloading for method java.math.BigDecimal#<init>
Run Code Online (Sandbox Code Playgroud)

此外,它说一个可能的重载是BigDecimal(String val)构造函数.我不确定究竟是[class [C]指什么,但我猜它指的是BigDecimal(BigInteger val).

引起它的那条线可能是这样的:

new java.math.BigDecimal (settlement)
Run Code Online (Sandbox Code Playgroud)

因为结算变量为空.在类似的情况下你可以像这样抛出参数:

new java.math.BigDecimal (settlement as String)
Run Code Online (Sandbox Code Playgroud)

但它可能会在以后抛出NullPointerException.因此,请确保不将空值传递给BigDecimal的构造函数.