Как добавить @SerialVersionUID в анонимный класс? - PullRequest
11 голосов
/ 05 апреля 2011

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

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

Класс Foo является абстрактным классом.

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

1 Ответ

10 голосов
/ 05 апреля 2011

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

В Scala частные значения, которые оцениваются как постоянные, известные во время компиляции, превращаются в частные статические конечные переменные Java.Эта недокументированная функция должна помочь вам.Просто проверьте реализацию списков в Scala (см., Например, src / 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,Я не проверял это, хотя относительно того, является ли последовательная версия полученного класса фактически предоставленной.

...