4 votes

Pourquoi ce code Groovy essaie-t-il de faire un casting ?

Je reçois une exception de cast à la ligne "handDetailList.each". Je ne comprends pas pourquoi mon code essaie de convertir une liste en une classe "Hand" ? Il me semble que Groovy fait parfois des choses étranges avec le casting.... ?

private Hand buildHands(List handDetailList) {

        def parsedHand = new Hand()

        parsedHand.setTableName(handDetailList.get(1))

        handDetailList.each {

        }
    }

J'obtiens l'exception suivante (j'ai édité l'exception, la ligne 70 est "handDetailList.each {") :

Exception in thread "main" org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object <details of the list, omitted> with class 'java.util.ArrayList' to class 'gameMechanics.Hand' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: gameMechanics.Hand(java.lang.String,........

    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:358)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:599)
    at advisor.HistoryParser.buildHands(HistoryParser.groovy:70)
    at advisor.HistoryParser.this$2$buildHands(HistoryParser.groovy)
    at advisor.HistoryParser$this$2$buildHands.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
    at advisor.HistoryParser.parse(HistoryParser.groovy:57)
    at advisor.HistoryParser$parse.call(Unknown Source)

5voto

tim_yates Points 63521

each retourne la liste que each a été sollicité.

Vous avez dit que la fonction retourne un objet de type Hand et comme Groovy renvoie automatiquement la dernière instruction d'une méthode, il essaie de convertir la liste en une instance de Hand et échouant...

Qu'est-ce que vous voulez rendre ? Le site parsedHand variable ?

Essayez peut-être :

private Hand buildHands(List handDetailList) {
    def parsedHand = new Hand()
    parsedHand.setTableName(handDetailList.get(1))
    handDetailList.each {
    }
    parsedHand
}

si c'est le cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X