我正在扩展一个实现Serializableinterface的类(ArrayBlockingQueue).Sun的文档(和我的IDE)建议我应该设置这个值以防止恶作剧:However,itisstronglyrecommendedthatallserializableclassesexplicitlydeclareserialVersionUIDvalues,sincethedefaultserialVersionUIDcomputationishighlysensitivetoclassdetailsthatmayvarydependingoncompilerimplementati
我知道我可以使用serialVersionUID来控制类的版本。而且我读到我可以添加或删除字段,并且该类仍然是兼容的,它只会使用默认值。什么时候必须更改serialVersionUID? 最佳答案 当对类的结构进行不兼容的更改时,最好更改serialVersionUID字段的值。存在不兼容更改的完整列表在JavaObjectSerializationSpecification.进一步扩展,对类的不兼容更改将阻止反序列化机制创建对象的实例,因为流中存在未映射到当前类定义的信息。 关于jav
在java中,如果一个类实现了Serializable但是是抽象的,它应该有一个serialVersionUIDlong声明,还是子类只需要这个?在这种情况下,确实是所有子类都处理序列化,因为类型的目的是在RMI调用中使用。 最佳答案 serialVersionUID用于确定反序列化对象与类的当前版本之间的兼容性。因此,在类的第一个版本中,或者在这种情况下,在抽象基类中,它并不是真正需要的。您永远不会有该抽象类的实例来序列化/反序列化,因此它不需要serialVersionUID。(当然,它确实会生成一个编译器警告,你想摆脱它,对吧
由于kotlin没有静态字段,我应该在伴随对象中定义serialVersionUID吗? 最佳答案 要在Kotlin中为类创建serialVersionUID,您有几个选项都涉及向类的伴随对象添加成员。最简洁的字节码来自privateconstval,它将成为包含类的私有(private)静态变量,在本例中为MySpecialCase:classMySpecialCase:Serializable{companionobject{privateconstvalserialVersionUID:Long=123}}您也可以使用这些表单
这个问题在这里已经有了答案:WhatisaserialVersionUIDandwhyshouldIuseit?(25个回答)关闭4年前。我有标题中给出的警告信息。我想了解并删除它。我已经找到了关于这个问题的一些答案,但由于技术术语过多,我不理解这些答案。能不能用简单的话来解释这个问题?附:我知道OOP是什么。我知道什么是对象、类、方法、字段和实例化。附言如果有人需要我的代码,就在这里:importjava.awt.*;importjavax.swing.*;publicclassHelloWorldSwingextendsJFrame{JTextAream_resultArea=ne
当类在Eclipse中实现Serializable时,我有两个选择:添加默认的serialVersionUID(1L)或生成的serialVersionUID(3567653491060394677L)。我认为第一个更酷,但很多时候我看到人们使用第二个选项。有什么理由生成longserialVersionUID? 最佳答案 据我所知,这只是为了与以前的版本兼容。这仅在您之前忽略使用serialVersionUID,然后进行了您知道应该为compatible的更改时才有用。但这会导致序列化中断。见JavaSerializationSp
如何在IntelliJIDEA中生成这个值?我去设置->错误->序列化问题->没有'serialVersionUID'的可序列化类,但它仍然没有给我看警告。我的类PKladrBuilding父级实现interfaceSerializable。部分代码:publicclassPKladrBuildingextendsPRQObjectpublicabstractclassPRQObjectextendsPObjectpublicabstractclassPObjectimplementsSerializable 最佳答案 我不确定您是
如何在IntelliJIDEA中生成这个值?我去设置->错误->序列化问题->没有'serialVersionUID'的可序列化类,但它仍然没有给我看警告。我的类PKladrBuilding父级实现interfaceSerializable。部分代码:publicclassPKladrBuildingextendsPRQObjectpublicabstractclassPRQObjectextendsPObjectpublicabstractclassPObjectimplementsSerializable 最佳答案 我不确定您是
前言java中的序列化可能大家像我一样都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过。直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的序列化对象没有加上serialVersionUID,那你们知道下面几个问题吗:序列化对象中的serialVersionUID 是干嘛用的?如何修改默认的序列化机制?如何使用序列化的方式克隆对象?对象序列化和反序列化机制序列化: 将对象转成二进制写到输出流的过程。反序列化: 通过输入流读回二进制转成对象的过程。通过对象的序列化和反序列化机制可以实现对象在网络之间传输。在
前言java中的序列化可能大家像我一样都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过。直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的序列化对象没有加上serialVersionUID,那你们知道下面几个问题吗:序列化对象中的serialVersionUID 是干嘛用的?如何修改默认的序列化机制?如何使用序列化的方式克隆对象?对象序列化和反序列化机制序列化: 将对象转成二进制写到输出流的过程。反序列化: 通过输入流读回二进制转成对象的过程。通过对象的序列化和反序列化机制可以实现对象在网络之间传输。在