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

时间:2011-10-28 13:11:15

标签: grails groovy

读者注意:感谢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[] 

1 个答案:

答案 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个单独的实例?