Groovy ambigu surcharge de la méthode
Matin, je vois que les mêmes questions ont été posées une couple de fois, mais ils semblent tous pour les projets compilés ou ceux impliquant Gradle. De toute façon, j'obtiens le message d'erreur
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]
quand je lance ce petit script
String amt = "1"
String currency = "GBP"
String targetCurrency = "USD"
def settlement = crossCurrencyClient.crossCurrency(amt, currency, targetCurrency)
return transfer.amount * new java.math.BigDecimal (settlement)
qui est lui-même qui déclenche ce
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()
Je ne peux pas savoir quel est le problème ici. Aussi loin que je peux voir toutes les méthodes sont effectués correctement et il n'y a pas d'ambiguïté. Quelqu'un peut-il point à l'endroit où je vais mal?
comme BigDecimal a plusieurs constructeurs je suppose que je ne peux pas résoudre, lequel, par conséquent l'erreur
OriginalL'auteur Horsebrass | 2015-10-29
Vous devez vous connecter pour publier un commentaire.
L'ambiguïté de l'appel de méthode est la BigDecimal constructeur:
Plus loin, il dit que une possible surcharge est la
BigDecimal(String val)
constructeur. Je ne suis pas sûr de ce que exactement[class [C]
reportez-vous à mais je suppose qu'il fait référence à laBigDecimal(BigInteger val)
.La ligne qui en est la cause est probablement celui-ci:
parce que le règlement de la variable est null. Dans des situations semblables, vous pouvez simplement lancer le paramètre comme suit:
mais il ne sera probablement jeter NullPointerException plus tard. Donc, assurez-vous de ne pas transmettre les valeurs null à BigDecimal du constructeur.
OriginalL'auteur Michal M
Comme l'exception dit,
settlement
estnull
tellement Groovy ne sais pas quel constructeur deBigInteger
à l'appel (comme la valeur null peut être soit).Elle est nulle en raison de:
donc si
json
ousource_amount
sont nuls, alorsmultiplier
est nulle, de sorte que vous retourner la valeur null...Vous pouvez arrêter votre méthode de retourner null... Ou modifiez le constructeur:
OriginalL'auteur tim_yates