当你使用serialVersionUID(1L)而不是生成serialVersionUID(3567653491060394677L)时,你会说些什么。
您是说100%确信没有任何系统可以触及此类具有此类的不兼容序列化版本且版本号为1的系统。
如果你能想到它的序列化版本历史未知的任何借口,那么可能很难自信地说出来。 在它的一生中,一个成功的课程将由许多人维护,生活在许多项目中,并且驻留在许多系统中。
你可以为此感到痛苦。 或者你可以玩彩票希望失败。 如果你生成版本,你很可能会出错。 如果你假设“嘿我打赌没有人用过1”你的赔率大于微小。 正是因为我们都认为0和1很酷,你有更高的命中率。
-
当您生成serialVersionUID(3567653491060394677L)而不是使用serialVersionUID(1L)时,您正在说些什么。
你是说人们可能在本课程的历史上手动创建或生成了其他版本号,而你并不在意,因为Longs正在大肆宣传。
无论哪种方式,除非你完全知道在整个宇宙中序列化类所使用的版本号的历史,否则你有机会。 如果你有时间100%确定1是AOK,那就去吧。 如果这需要很多工作,请继续并盲目地生成数字。 你更有可能赢得彩票而不是出错。 如果确实如此,请告诉我,我会给你买啤酒。
随着所有关于玩彩票的谈话,我可能给你的印象是serialVersionUID是随机生成的。 实际上只要数字范围均匀分布在Long的每个可能值上就可以了。 但是,它实际上是这样做的:
[http://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100]
你得到的唯一区别是你不需要随机来源。 您正在使用类本身的更改来更改结果。 但根据鸽笼原则,它仍有可能出错并发生碰撞。 这非常不可能。 祝我喝啤酒好运。
然而,即使该类只存在于一个系统和一个代码库中,认为手动递增数字会使您没有碰撞的机会只意味着您不了解人类。:)