在
scala中,我想禁用许多case类的Serializable特性,因为我希望这类对象永远不会被序列化并运送到分布式计算框架中的远程计算机(特别是Apache Spark),任何这样做的实现都应该这样做当序列化包含它的任何闭包时,触发显式运行时异常.
我已经尝试了@transient null检查,它在反序列化时触发了运行时异常(不是我想要的),并且错误信息非常混淆.有没有办法改善这个?
非常感谢您的建议!
解决方法
您可以实现并混合禁用序列化的特征:
trait NotSerializable extends Serializable { private def writeObject(out: java.io.ObjectOutputStream): Unit = throw new NotSerializableException() private def readObject(in: java.io.ObjectInputStream): Unit = throw new NotSerializableException() private def readObjectNoData(): Unit = throw new NotSerializableException() } case class Test(foo: String) extends NotSerializable
尝试序列化将引发异常:
new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(Test("test")) |-> java.io.NotSerializableException: A$A39$A$A39