Yis*_*hai 2 java serialization
这个问题与以下内容完全相同:
具有讽刺意味的是,Michael Bogswardt也回答道.
Michael Bogswardt对生成serialVersionUID的回答让我思考.有没有理由生成像eclipse和IDEA(或简单的serialver)这样的正确的serialVersionUID?或插入1L一样好?
lap*_*apo 11
一旦你在那里写了一个数字(任意数字),当你对类进行兼容性破坏性更改时,你有责任阻止它(例如,更改JavaDoc不会破坏它,添加属性肯定会这样做).
如果你避免指定a serialVersionUID,javac会把类似哈希的东西放在那里.
什么时候重要?当您将内容序列化到磁盘并希望稍后使用不同版本的程序加载它时.或者,当两个可能具有不同版本的实例需要通过线路交换序列化数据时.
如果你不使用实际的序列化而你的类Serializable只是因为它继承了那个接口,那么避免使用serialVersionUID它是最容易和最安全的事情.如果您进行序列化但不需要与过去兼容,那也是相同的,在这种情况下,避免使用值是最安全的事情.
另一方面,如果您需要加载使用过去修订版生成的东西(远程或自己,从磁盘上长期遗忘的文件),那么您需要具有该值并且在(和只有当你确实破坏兼容性时.
在第二次评论后添加(Robin):
不回答实际问题.
呃,对.我想这是一个:没有,据我所知,实际数字没有任何意义,它只需要与以前的所有以前的值不同,当它与它们不再兼容时.
此外,您应该始终为Serializable类声明serialVersionUID
作为一般建议,我认为避免它是一个更好的解决方案:大多数时候你不需要与不同供应商的JVM交谈,你不需要长时间反序列化数据或实际需要兼容性检查,大多数时候序列化对象都是非常短暂的.
当然,对于不同的项目来说可能会有很大不同,当你确实拥有长期的序列化对象时,你必须承担定义这些UID并正确维护它们的负担.
但是由于缺少UID意味着"快速失败,捕获错误",而使用1L(或任何其他常数)通常意味着"班级改变,你不记得更新它,后来出现问题",然后作为一般建议,我认为第一个是更好的默认值.
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |