Eclipse,你为什么要惯着我!

前言

        这是我很想问Eclipse的一个问题,为什么要这么惯着我,每次都帮我生成serialVersionUID。一旦不生成还会提醒我,把代码的颜色都变了。但是,殊不知,这是一种欺骗。那么,到底欺骗了谁呢?


为何欺骗了我

        如前面所说,Eclipse会为我们自动的生成serialVersionUID,这看起来没有什么毛病,但是实际上,大家要清楚这样做是有问题的,java从出生的时候,就提出了, Wirte once,Run Everywhere的口号。那么当然,是要支持分布式的调用的。
        这个时候,就出现了必须把类序列化成字节流,方便在网络上进行传输。当然,必须要实现Serializable接口。但我们来思考一个问题,到底在反序列化的时候,就是从字节变成对象的时候是如何校验其没有发生变化的。这里就使用到了我们这里的这个serialVersionUID。当我们没有去指定这个变量的时候,JVM会为我们自动生成。大致上采用包名-类名-方法名-成员变量等综合生成一个不重复的数字。我们来假设这样一种情景。


这里写图片描述


        如上所示,消费者请求接口,然后提供者返回接口,这个时候我们可以看到User类序列化,然后通过字节码的方式传输。随后被反序列化。在被反序列化的时候要注意的一点是,这个时候会用到serialVersionUID,这里我们没有重新写一个UID出来吗,因此,这个时候它会根据自己的一些参数计算。如果两者相同,也就是存储在字节流中的UID和customer端生成的相同,序列化正常。否则抛出序列化版本不一致的异常。啊哈


        但是,我们可以向JVM撒谎,也就是把UID写成一个常量,这样就算我们加了新的字段,变了方法之类的,序列化仍旧正常。也就是兼容老的没有来得及升级的版本。


总结


        虽然这是一种欺骗JVM的方式,so IDEA是不提供这种自动生成UID的功能的,阿偶。又安利了一下。但是,为了防止有的customer不及时升级,只能这样了。啊哈,看来道理上错的在实践中不一定是错的。最后说一句,Eclipse你为何惯着我!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值