のインスタンスを作成する必要がありますが、java.lang.Class
それ以外は同じですclassOf[MyClass]
が、持ってSerialVersionUID
いMyClass
ない があります。MyClass
Scala-2.10 クラスです。1 つの問題は、Scala には statics がないため、Java ではScala で時間SerialVersionUID
がかかることです。static final
SerialVersionUID
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% 正しいようにするにはどうすればよいでしょうか。