4

のインスタンスを作成する必要がありますが、java.lang.Classそれ以外は同じですclassOf[MyClass]が、持ってSerialVersionUIDMyClassない があります。MyClassScala-2.10 クラスです。1 つの問題は、Scala には statics がないため、Java ではScala で時間SerialVersionUIDがかかることです。static finalSerialVersionUID

Java クラスの場合MyClass、Javassist を使用してこれを行うことができると思います。

  val ctclass = javassist.ClassPool.getDefault().get("mypackagage.MyClass")
  val field = javassist.CtField.make(
      "private static final long serialVersionUID = 1L;",
      ctclass)
  ctclass.addField(field)
  val cls = ctclass.toClass()

ただし、これは Scala クラスでは静かに機能しません。逆シリアル化のために ClassLoader でこれを使用しようとしました。逆シリアル化中にコンパイル エラーや実行時エラーは発生しませんでしたが、逆シリアル化されたオブジェクトは不完全なので、もっと微妙な問題があるはずです。悲惨な詳細はここで説明されています。おそらく問題はstatic final、Scala でのフィールドの処理方法と、Javassist が Java しか理解できないという事実に起因しています。Javassist またはその他の手段を使用して Scala クラスに対して 100% 正しいようにするにはどうすればよいでしょうか。

4

1 に答える 1