11

我想将以下代码从 Java 翻译成 Scala:

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

Foo是一个抽象类。

等效代码在 Scala 中是怎样的?

4

1 回答 1

10

有一个用于添加 ID 的 Scala 注释。但似乎您不能将此解决方案应用于匿名内部类。但是,根据Scala FAQ

在 Scala 中,评估为编译时已知常量的私有值被转换为私有静态最终 Java 变量。这个未记录的功能应该可以为您解决问题。只需检查 Scala 中列表的实现(参见例如 src/scala/List.java)。两个类 :: 和 Nil 都有一个如下形式的字段 serialVersionUID: private val serialVersionUID = numeric literal;

编码

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 编译器编译得很好。我还没有测试过它,尽管结果类的串行版本是否实际上是提供的。

于 2011-04-05T13:10:20.397 回答