读者注意:感谢Tim的帮助,我能够解决问题。问题的根源不是ArrayList转换,而是运行时引擎将错误指向错误的行,即我在下面显示访问列表的位置。真正的错误是下面4行,我错误地将一个元素分配给我刚刚检索到的元素。
我有一个小的Result类(在我的grails控制器类的底部),然后在我的代码中,我做
ArrayList<Result> bestResults = new ArrayList<Result>()
帮助编译器知道bestResults是什么(但尝试下面的其他形式)。然后,我尝试通过以下方式访问此arraylist:
for (int r = 0; r < topSet; r++) {
Result res = bestResults[r] as Result
并且,我得到一个“无法施放对象......对blahblah.Result”运行时错误。
我尝试了其他两种变体,即:
ArrayList bestResults = new ArrayList()
与
Result res = (Result) bestResults[r]
或只是
Result res = bestResults.get(r) as Result
我总是得到相同的投射错误。我似乎无法取悦Groovy“引擎”/ JVM! :-): - (
你能帮忙吗?-----------------------更完整的代码-----------------
Result类位于我的grails控制器(主)类的底部,即:
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)
}
然后,当我去插入一个真实的结果时,我遇到了问题:
for (int r = 0; r < 10; r++) {
Result res = bestResults.get(r) as Result
或正在做
Result res = bestResults[r] as Result
或
Result res = bestResults[r]
所有人都给出错误:
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[]
答案 0 :(得分:1)
是的,问题是你提供的最后一点信息......
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
}
或者,更加时髦:
bestResults.each { Result r -> println r }
该错误消息表示您正在尝试将array of float
(即:float[]
)转换为Result对象
您发布的代码中必定缺少某些内容,就好像我将其粘贴到groovy控制台中一样,它可以正常运行
虽然有点奇怪......
您确实意识到您要将相同的Result
实例添加到列表10次,不是吗?不是10个单独的实例?