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