serialVersionUID在我看来有一个非常宽松的规范.开发具有可序列化接口的类的任何主体都可以使用InvalidClassException来烧伤他的手.另外,我看到一个使用int作为数据类型而不是长的开发者.
所以,我的问题是为什么Java设计人员和开发人员没有做更具体的事情,就像我们实现可序列化时一样,我们必须实现一个设置serialVersionUID的方法,就像hashcode方法一样.
那么,我错过了什么?对我来说似乎不是一把双刃剑.
更新1:
我的错误我给出了一个错误的例子,比较了一个类级别的东西和一个实例级别的东西.由于这个原因,我在不同公司看到了许多生产问题.但我的一般想法是不能让编译器以任何方式更加严格.
请记住要求:
现在退后一步:
结论:使用静态字段可以解决以上所有问题.当您使用方法时 - 您仍然需要创建该字段.让它沉入:当使用方法时,实现必须调用方法,将其作为字段写入字节流 - 并且在读取字节流时,需要消耗该数字 - 因为它无法映射到"真正的"班上的领域.比较一下:有一个静态字段被写入字节流并从那里读取.
所以 - 从技术的角度来看,以某种方式在ID中集成这种ID 的自然方式是在类上要求静态字段.
当然你可能已经发明了别的东西.现代java 可能使用了注释.但是,当Java被发明时,这种注释的使用并不存在(并且这种序列化从第1天开始就在Java中).然后:现代java首先不使用"字节流"定向序列化.
或者正如Stephen建议的答案 - 您可以根据班级的当前内容计算该ID.但同样:这项技术是20年前发明的.那时候,计算 id可能需要花费你1,5,10秒.将其与读取静态字段的努力进行比较.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |