Я вижу из вашей трассировки стека, что вы используете скрипт запуска:
scala -nc noser.scala
, где я назвал скрипт как в Yessir, нет, сэр, потому что естьсериализация не происходит.
-nc
избегает запуска демона сервера компиляции.
Если исполнитель сценариев не видит объект с методом main, он упаковывает код сценария в класс, которыйявляется локальным по отношению к основному методу, который он создает для вас.
def main(args: Array[String]) = { class anon_class { code } ; new anon_class() }
Ваш код выполняется в конструкторе, что тоже не очень хорошая идея.
Выможно увидеть это с помощью -Xprint:typer,flatten
.Или поэкспериментируйте с -Xprint:all
.
Ваш сериализуемый класс имеет внешний указатель на анонимный локальный класс, а анонимный класс не сериализуем.
Возможно, внешний указатель - просто ошибка.Или нет, см. Ссылку ниже.Требуется подсказка для устранения внешнего указателя, например, создание класса final
.
. Я вижу, что были подобные ошибки, такие как , в этом случае, когда закрывающий модуль захвачен лямбдой .
Ваш обходной путь - поместить ваш код в метод main объекта или обернуть все в App
.
object Main extends App {
// code
}
Другой обходной путь - сделать сериализуемый класс * 1035.*.Существует обсуждение для этого билета и связанных билетов и fix .