У меня есть (неоцененное) задание по программированию, в котором я должен реализовать циклическую очередь с использованием scala-stm из https://nbronson.github.io/scala-stm/.
У меня есть функция получения:
public E get() {
E item = STM.atomic(new Callable<E>(){ public E call()
{
if (isEmpty()) STM.retry();
E item = (E) items.refViews().apply(tail.get());
//STM.increment(count, -1);
return item;
}});
return item;
Теперь мне нужно выполнить приведение к E, (E) items.refViews().apply(tail.get()); или я получаю ошибку компилятора. Что вроде имеет смысл. Но в модульном тесте этот элемент пытаются привести к типу int, чтобы убедиться, что это то же значение, что и при помещении в циклическую очередь.
Но я получаю следующее classCastException:
java.lang.ClassCastException: class scala.concurrent.stm.ccstm.TArrayImpl$$anon$3 cannot be cast to class java.lang.Integer (scala.concurrent.stm.ccstm.TArrayImpl$$anon$3 is in unnamed module of loader 'app'; java.lang.Integer is in module java.base of loader 'bootstrap')
Хотя объект изначально был целым числом, его нельзя привести обратно. Как мне это сделать? Я подробно изучил документацию, и, кажется, на самом деле это делается так же, но для строк. Когда я пробую строки, я больше не получаю это исключение, но обратное приведение превращается в имя объекта TArray. Я делаю что-то не так, но я не уверен, что. Спасибо за любые подсказки!