相信很多人对 serialVersionUID 并不陌生,当然,也可能算不上熟悉(不然我为毛要写这东东)。代码里或多或少都加过这玩意儿(你不加的话,idea老提示你,你不烦?),但为嘛要加这个呢,加上了到底有嘛用?可能知道的人并不多。接下来就让我们聊聊程序员与serialVersionUID 之间的二三事。
一般我们要讨论一个东西的用处,总是从有它的时候是怎样,没它的时候又是怎样,然后两者一对比,用处大概就呼之欲出了。设想这样一个场景,一个对象被序列化后保存在某个地方,比如说文件系统,然后反序列化回来的时候我咋知道进来的这个玩意儿还是原先出去的那个呢?好像莫得办法吧。这就有点像真假美猴王,我咋知道现在回来的猴子就是刚刚离开的猴子呢?再设想一下,要是我给出去的对象打上一个标记呢,这个标记在对象的属性一旦发生任何变化都会强制地也发生变化。这样一来只要将回来的对象的这个标记与出去的那个一比对,只要不一样就抛个异常,这样问题是不是就迎刃而解了呢?(感情这个标记只有如来佛祖能看到)serialVersionUID 就相当于这个标记,而编译器就是那个负责生成标记的人。当然了,还是推荐显示地指定serialVersionUID ,靠编译器自动生成有点不靠谱,毕竟serialVersionUID 的生成与编译器的具体实现有关。
综上所述,其实serialVersionUID解决的就是如何判断我还是从前那个少年,没有一丝丝改变。
最后提一嘴,serialVersionUID 必须是static、final的long类型值。
「艾尔登法环」梅琳娜手办开订 立体手办▪
万代「艾尔登法环」白狼战鬼手办开订 立体手办▪
「夏目友人帐」猫咪老师粘土人开订 立体手办▪
「五等分的新娘∬」中野三玖·白无垢版手办开订 立体手办▪
「海贼王」乌索普Q版手办开订 立体手办▪
良笑社「初音未来」新手办开订 立体手办▪
「黑岩射手DAWN FALL」死亡主宰手办开订 立体手办▪
「盾之勇者成名录」菲洛手办登场 立体手办▪
「魔法少女小圆」美树沙耶香手办开订 立体手办▪
「咒术回战」七海建人粘土人登场 立体手办▪
「五等分的新娘」中野二乃白无垢手办开订 立体手办▪
「为美好的世界献上祝福!」芸芸粘土人开订 立体手办▪
「公主连结 与你重逢」六星可可萝手办开订 立体手办▪
「女神异闻录5」Joker雨宫莲手办开订 立体手办▪
「间谍过家家」约尔・福杰粘土人登场 立体手办▪
「街角魔族 2丁目」吉田优子手办开订 立体手办▪
「火影忍者 疾风传」旗木卡卡西·暗部版粘土人登场 立体手办▪
「佐佐木与宫野」宫野由美粘土人开订 立体手办▪
「盾之勇者成名录」第2季拉芙塔莉雅手办开订 立体手办▪
「咒术回战」两面宿傩Q版坐姿手办开订 立体手办▪
「DATE·A·BULLET」时崎狂三手办开订 立体手办▪
「狂赌之渊××」早乙女芽亚里粘土人开订 立体手办▪
「魔道祖师」魏无羨粘土人开订 立体手办▪
「新·奥特曼」奥特曼手办现已开订 立体手办▪