Java 类对象是否应该序列化?
我们有一个分布式应用程序,我们的“托管”节点必须向控制器节点发送有关“功能”的信息。我们的第一种方法是简单地发送一些Java 类对象是否应该序列化?,java,serialization,Java,Serialization,我们有一个分布式应用程序,我们的“托管”节点必须向控制器节点发送有关“功能”的信息。我们的第一种方法是简单地发送一些Map的实例。(在我的问题中可以忽略值的FeatureSet类) 现在,一位同事在一篇评论中建议避免序列化java.lang.Class的实例,主要是因为潜在的版本不兼容问题:随着时间的推移,我们的控制器节点被更新的系统所取代,而“托管”节点则保持不变。这意味着控制器节点可能在几年内运行Java12、13、xx,接收Java8JVM生成的序列化映射对象 我认为这不会导致问题(希望发
Map
的实例。(在我的问题中可以忽略值的FeatureSet
类)
现在,一位同事在一篇评论中建议避免序列化java.lang.Class
的实例,主要是因为潜在的版本不兼容问题:随着时间的推移,我们的控制器节点被更新的系统所取代,而“托管”节点则保持不变。这意味着控制器节点可能在几年内运行Java12、13、xx,接收Java8JVM生成的序列化映射对象
我认为这不会导致问题(希望发布JVM的人避免对这样的核心类进行不兼容的更改),但我仍然想知道,鉴于上述要求,是否有很好的技术理由不序列化java.lang.Class
的实例
换句话说:例如,将映射键类型更改为
String
是否有好处(在这种情况下,我们可以简单地使用clazz.getCanonicalName()
作为键,而不是一些clazz
对象)?作为替代解决方案:您不能使用map
进行序列化吗,其中,字符串
表示类和接收站点上的完全限定类名?@Turing85也可以,但理论上,当出现例如class.forName()
时,会出现错误情况。原始字符串永远不会失败,最糟糕的情况是,在字符串映射中找不到某些字符串。我同意你的同事的看法。。将类
反序列化到尚未加载它的JVM中不会产生任何有用的效果,如果确实加载了它,为什么要反序列化它?只需发送名称。@EJP好吧,源代码也是关于向读者传达意图的。我们的功能是按类组织的,因此使用以类对象为键的映射就像自然的事情一样来表达。。。