如何使用scala中的case序列/对象不可序列化?注释/特征/帮助者的
发布时间:2020-12-16 18:08:32 所属栏目:安全 来源:网络整理
导读:在 scala中,我想禁用许多case类的Serializable特性,因为我希望这类对象永远不会被序列化并运送到分布式计算框架中的远程计算机(特别是Apache Spark),任何这样做的实现都应该这样做当序列化包含它的任何闭包时,触发显式运行时异常. 我已经尝试了@transient nu
在
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 但是,您确实需要案例类的哪些功能?最简单的解决方案可能是不使用案例类和对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- twitter-bootstrap – 如何在resize上更改行中的列数 – Bo
- 什么是tslint黑名单以及为什么angular-cli在tslint.json列表
- AngularJS:将params从控制器传递到服务
- shell – 在unix中使用变量作为变量名的一部分
- angular.js 4第一步之搭建环境
- scala – 使用自定义ExecutionContext执行Future.sequence
- fedora 23 lvm2格式 根目录磁盘空间不足 扩容方法
- 企业级服务器设计与实现经验之系统框架(一)
- unix – 在’cd’命令后回到上一个位置?
- angularjs – 指令实例之间通信的最佳方式