Как добавить @SerialVersionUID в анонимный класс?

Я хочу перевести следующий фрагмент кода с Java на Scala:

Foo foo = new Foo() { private static final long serialVersionUID = 12345L; }

Класс Foo - абстрактный класс.

Как выглядит эквивалентный код в Scala?

Ответ 1

Существует аннотация Scala для добавления идентификатора. Но, похоже, вы не можете применить это решение к анонимным внутренним классам. Однако в соответствии с Scala часто задаваемыми вопросами:

В Scala частные значения, которые оценивают к константе, известной во время компиляции превращаются в частные статические финалы Переменные Java. Это недокументированное функция должна сделать трюк для вас. Просто ознакомьтесь с списки в Scala (см. ЦСИ /scala/List.java). Оба класса:: и Nil имеют поле serialVersionUID следующего вида: private val serialVersionUID = числовой литерал;

Код

object Ser extends Application {
    trait Foo { def xy: Int }
    val x = new Foo with java.io.Serializable { def xy = 2; private val serialVersionUID = 1L }
}

компилируется с компилятором 2.8.1. Я не тестировал его, хотя вопрос о том, действительно ли серийная версия результирующего класса была поставлена.