【发布时间】:2011-10-28 13:11:14
【问题描述】:
读者注意:感谢 Tim 在下面的帮助,我能够解决问题。问题的根源不是 ArrayList 转换,而是运行时引擎将错误指向错误行的事实,即我在下面显示的访问列表的行。真正的错误是低于 4 行,我在将元素分配到刚刚检索到的元素中时犯了一个错误。
我有一个小的 Result 类(在我的 grails 控制器类的底部),然后在我的代码中,我这样做了
ArrayList<Result> bestResults = new ArrayList<Result>()
帮助编译器知道 bestResults 是什么(但尝试了下面的其他形式)。然后,我尝试通过以下方式访问这个数组列表:
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
其中results定义为顶部的浮点数组,即:
def results = new float[2 * deltaRange + 1] as float[]
【问题讨论】: