gpt4 book ai didi

grails - groovy ArrayList 强制转换(注意 : appears to be a bug with the runtime error line identification, 不是 ArrayList 强制转换)

转载 作者:行者123 更新时间:2023-12-02 14:46:48 25 4
gpt4 key购买 nike

读者须知:感谢 Tim 在下面的帮助,我能够解决问题。问题的根源不是 ArrayList 转换,而是运行时引擎将错误指向错误行的事实,即我在下面显示的访问列表的行。真正的错误是低于 4 行,我在将元素分配到刚刚检索到的元素中时犯了一个错误。

我有一个小的 Result 类(在我的 grails Controller 类的底部),然后在我的代码中,我做

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 Controller (主)类的底部,即:
class Result {
float factor
def results = null // NOTE: this will hold an array of float
}

然后,在 Controller 中,我执行以下操作,将 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[] 

最佳答案

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

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

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

原始答案

这是在Java代码中吗?

当您说“主要类(class)”时,您是什么意思?

这与 grails 有什么关系?

这适用于常规:
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 个单独的实例?

关于grails - groovy ArrayList 强制转换(注意 : appears to be a bug with the runtime error line identification, 不是 ArrayList 强制转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7929728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com