为什么这个Groovy代码要强制转换?

为什么这个Groovy代码要强制转换?,groovy,Groovy,我在“handDetailList.each”行收到一个强制转换异常。我不明白为什么我的代码试图将列表强制转换为“手动”类?在我看来,Groovy有时会在铸造方面做一些奇怪的事情 private Hand buildHands(List handDetailList) { def parsedHand = new Hand() parsedHand.setTableName(handDetailList.get(1)) handDetail

我在“handDetailList.each”行收到一个强制转换异常。我不明白为什么我的代码试图将列表强制转换为“手动”类?在我看来,Groovy有时会在铸造方面做一些奇怪的事情

private Hand buildHands(List handDetailList) {

        def parsedHand = new Hand()

        parsedHand.setTableName(handDetailList.get(1))


        handDetailList.each {

        }
    }
我得到以下异常(我已经编辑了异常,第70行是“handDetailList.each{”):

线程“main”org.codehaus.groovy.runtime.typehandling.GroovyCastException中的异常:无法将类为“java.util.ArrayList”的对象强制转换为类为“gameMechanics.Hand”,原因是:groovy.lang.GroovyRuntimeException:找不到匹配的构造函数:gameMechanics.Hand(java.lang.String,。。。。。。。。
位于org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:358)
位于org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:599)
位于advisor.HistoryParser.buildHands(HistoryParser.groovy:70)
在advisor.HistoryParser.this$2$buildHands(HistoryParser.groovy)
在advisor.HistoryParser$this$2$buildHands.callCurrent(未知源)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
位于advisor.HistoryParser.parse(HistoryParser.groovy:57)
位于advisor.HistoryParser$parse.call(未知源)

每个
返回调用每个的列表

您已经说过,函数返回类型为
Hand
的对象,Groovy自动返回方法中的最后一条语句,它试图将列表转换为
Hand
的实例,但失败了

您想返回什么?parsedHand变量的

也许可以试试:

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

如果是这样。

太好了!我错过了,忘记了groovy中最后计算的表达式是默认的返回值。Thank我在向2参数函数发送1参数时遇到了这个错误,Total使我偏离了方向35; hategroovy
private Hand buildHands(List handDetailList) {
    def parsedHand = new Hand()
    parsedHand.setTableName(handDetailList.get(1))
    handDetailList.each {
    }
    parsedHand
}