使用接口(BWC)中的默认方法进行序列化

时间:2018-07-18 08:50:46

标签: java serialization deserialization

我有一个界面 A ,并且该界面的实现 AImpl

接口有1种方法,该方法在 AImpl 中实现。 实现 AImpl 的成员很少,没有serialVersionUID。

问题会发生什么,如果将新的默认方法添加到接口 A 而不在 AImpl 中覆盖它?我在这里休息了吗?我会得到相同的序列化/反序列化结果吗?

1 个答案:

答案 0 :(得分:2)

不仅方法没有序列化,接口也没有序列化。

序列化的目的是写入与对象关联的数据,而不是其行为(除非也将其明确编码为数据,例如GregorianCalendar的TimeZone)

无法查看序列化对象中类具有的接口或方法,因此更改它们无效。

(您可能会推断出仅用于序列化的方法)

Java序列化确实对类的超类层次结构进行了编码,因此您不能轻易地对其进行更改。

但是,大多数序列化库都不这样做,并且您看不到此信息,如果更改它们也无所谓。缺点是,许多序列化库在类层次结构中不支持多次使用相同的字段名,而Java序列化则支持。