我需要创建一个实例,该实例在java.lang.Class
其他方面与它相同,classOf[MyClass]
但也有一个SerialVersionUID
,它MyClass
没有。MyClass
是一个 Scala-2.10 类。一个问题是,在 JavaSerialVersionUID
中使用 Scala 有一段static final
时间,SerialVersionUID
因为 Scala 没有静态。
如果MyClass
是 Java 类,我想我可以使用 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% 正确。