Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类对象是否应该序列化?_Java_Serialization - Fatal编程技术网

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好吧,源代码也是关于向读者传达意图的。我们的功能是按类组织的,因此使用以类对象为键的映射就像自然的事情一样来表达。。。