Grails groovy ArrayList转换(注意:似乎是运行时错误行标识的错误,而不是ArrayList转换)

Grails groovy ArrayList转换(注意:似乎是运行时错误行标识的错误,而不是ArrayList转换),grails,groovy,Grails,Groovy,读者注意:多亏蒂姆在下面的帮助,我才得以解决这个问题。问题的根源不是ArrayList转换,而是运行时引擎将错误指向了错误的行,即我在下面显示的访问列表的行。真正的错误是在下面4行,在这里我错误地将一个元素分配到我刚刚检索到的元素中 我有一个小的结果类(在我的grails控制器类的底部),然后在我的代码中,我有 ArrayList<Result> bestResults = new ArrayList<Result>() 与 或者只是 Result res = best

读者注意:多亏蒂姆在下面的帮助,我才得以解决这个问题。问题的根源不是ArrayList转换,而是运行时引擎将错误指向了错误的行,即我在下面显示的访问列表的行。真正的错误是在下面4行,在这里我错误地将一个元素分配到我刚刚检索到的元素中

我有一个小的结果类(在我的grails控制器类的底部),然后在我的代码中,我有

ArrayList<Result> bestResults = new ArrayList<Result>()

或者只是

Result res = bestResults.get(r) as Result
我总是犯同样的铸造错误。我似乎无法取悦Groovy“引擎”/JVM!:-):-(

你能帮忙吗

-----------------------更完整的代码-----------------

Result类位于grails controller(main)类的底部,即:

class Result {
   float factor
   def results = null // NOTE: this will hold an array of float
}
然后,在控制器中,我执行以下操作,将bestResults初始化为伪值:

 def results = new float[2 * deltaRange + 1] as float[] // the results array gets assigned to bestResults AFTER the error I get, so it seems non-relevant

 ArrayList<Result> bestResults = new ArrayList<Result>()
 Result fakeResult = new Result(factor: 100.0f, results: null)
 for (int r = 0; r < 10; r++) {
        bestResults.add(r,fakeResult)
 }

都给出了错误:

Message: Cannot cast object '[F@4f5b6d' with class '[F' to class 'alwaysbetter.Result'
*发生此错误后,我得到了执行以下操作的代码:

bestResults[r].results =  results
其中,结果定义为顶部的浮点数组,即:

def results = new float[2 * deltaRange + 1] as float[] 

对,问题是你提供的最后一点信息

def results = new float[2 * deltaRange + 1] as float[] 
在groovy中没有意义,要获得
2*deltaRange+1
元素的浮点数组,最好的选择可能是:

float[] results = [ 0 ] * ( 2 * deltaRange + 1 )
原始答案 这是否在Java代码中

你说“主课”是什么意思

这与grails有什么关系

这在groovy中起作用:

class Result {
  String name
}

ArrayList<Result> bestResults = new ArrayList<Result>()

bestResults << new Result( name:'tim' )

for (int r = 0; r < bestResults.size(); r++) {
   Result res = bestResults[r]
   println res
}
问题更新后编辑 该错误消息表示您正试图将浮点数组(即:
float[]
)转换为结果对象

您发布的代码中一定缺少某些内容,就像我将其粘贴到groovy控制台中一样,它工作正常

不过有点奇怪


您确实意识到您正在将相同的
结果
实例添加到列表中10次,不是吗?不是10个单独的实例吗?

对,问题是您提供的最后一点信息

def results = new float[2 * deltaRange + 1] as float[] 
在groovy中没有意义,要获得
2*deltaRange+1
元素的浮点数组,最好的选择可能是:

float[] results = [ 0 ] * ( 2 * deltaRange + 1 )
原始答案 这是否在Java代码中

你说“主课”是什么意思

这与grails有什么关系

这在groovy中起作用:

class Result {
  String name
}

ArrayList<Result> bestResults = new ArrayList<Result>()

bestResults << new Result( name:'tim' )

for (int r = 0; r < bestResults.size(); r++) {
   Result res = bestResults[r]
   println res
}
问题更新后编辑 该错误消息表示您正试图将浮点数组(即:
float[]
)转换为结果对象

您发布的代码中一定缺少某些内容,就像我将其粘贴到groovy控制台中一样,它工作正常

不过有点奇怪


您确实意识到您正在将同一个
Result
实例添加到列表中10次,不是吗?不是10个单独的实例吗?

Tim,我的意思是(在grails中)我有一个BlahController类,然后在底部,我创建了一个小的Result类。@RayK您能编辑您的问题以发布一个缩减(但更完整的)吗您正在尝试做什么的示例,以及它给出的错误?正如您所看到的,代码是有效的,因此它一定是您正在做的其他事情的问题doing@RayK更新的答案…认为你仍然遗漏了一些东西…这是真正失败的代码吗?因为我看不出它是如何失败的…是的,蒂姆。但我认为你正在理解我分配给Result类的结果是:def results=newfloat[2*deltaRange+1]作为float[]..我对伪结果的同一个实例没什么意见…我只是想在生成真实结果时与之进行比较,将最佳结果放在那里;它们的因子都小于1.0。@TIM-注意,我甚至不分配浮点结果数组,直到我得到上面的错误,检索对象。此外,我还尝试了cod你发了帖子,它就起作用了。所以它与浮点数组有关(应该还没有出现在图片中……嗯)。蒂姆,我的意思是(在grails中)我有一个BlahController类,然后在底部,我创建了一个小结果类。@RayK你能编辑你的问题来发布一个删减(但更完整)吗您正在尝试做什么的示例,以及它给出的错误?正如您所看到的,代码是有效的,因此它一定是您正在做的其他事情的问题doing@RayK更新的答案…认为你仍然遗漏了一些东西…这是真正失败的代码吗?因为我看不出它是如何失败的…是的,蒂姆。但我认为你正在理解我分配给Result类的结果是:def results=newfloat[2*deltaRange+1]作为float[]..我对伪结果的同一个实例没什么意见…我只是想在生成真实结果时与之进行比较,将最佳结果放在那里;它们的因子都小于1.0。@TIM-注意,我甚至不分配浮点结果数组,直到我得到上面的错误,检索对象。此外,我还尝试了cod你发了一个帖子,它就工作了。所以它和浮点数组有点关系(这应该还没有出现在图片中…嗯)。
def results = new float[2 * deltaRange + 1] as float[] 
float[] results = [ 0 ] * ( 2 * deltaRange + 1 )
class Result {
  String name
}

ArrayList<Result> bestResults = new ArrayList<Result>()

bestResults << new Result( name:'tim' )

for (int r = 0; r < bestResults.size(); r++) {
   Result res = bestResults[r]
   println res
}
bestResults.each { Result r -> println r }