ПРИМЕЧАНИЕ ДЛЯ ЧИТАТЕЛЯ: благодаря помощи Тима, приведенной ниже, я смог решить проблему. Корень проблемы заключался не в приведении к ArrayList, а в том, что механизм выполнения указывал ошибку не на ту строку, то есть на ту, что я показываю ниже, где я получаю доступ к списку. Настоящая ошибка была на 4 строки ниже этой, где я допустил ошибку, присваивая элемент только что найденному элементу.
У меня есть небольшой класс Result (в нижней части моего класса контроллера Grails), а затем в моем коде я делаю
ArrayList<Result> bestResults = new ArrayList<Result>()
, чтобы помочь компилятору узнать, что такое bestResults (но попробовал другие формы ниже). Затем я пытаюсь получить доступ к этому массиву через:
for (int r = 0; r < topSet; r++) {
Result res = bestResults[r] as Result
и я получаю сообщение об ошибке «Cannot cast object ... to 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[]