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があります。privateval serialVersionUID =numericliteral;

コード

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 に答える