Hazelcast VersionedPortable如何与类继承一起使用

时间:2019-09-20 17:04:24

标签: java hazelcast

因此,我们将VersionedPortable用作Hazelcast协议,并且我们知道在序列化/反序列化时字段的顺序很重要。我们不了解的是如何处理序列化/反序列化类中的继承?

Class A {
  int one;
  int two;

  void writePortable( PortableWriter writer ) {
     writer.writeInt( "one", one );
     writer.writeInt( "two", three );
  }
}
Class B extends A {
  int three;

  void writePortable( PortableWriter writer ) {
     super.writePortable(writer);

     writer.writeInt( "three", one );
  }
}

现在可以说我们在A类中添加了一个名为4的字段-然后顺序被破坏了。四个将在两个和三个之间序列化,这是不正确的。我唯一能想到的选择是仅在叶类中实现写入/读取方法,但是随着时间的推移将很难维护。另外,如果您有许多叶类,则很可能是错误的。有解决这个问题的更好方法吗?

1 个答案:

答案 0 :(得分:0)

如果您打算更改层次结构,那么也许应该计划长期实施。例如,在A类final方法中使writePortable成为可能,以便子类不实施它。而是定义一个抽象(或空的impl)writePortableSubcl()方法。这样,A类的writePortable看起来像:

public final void writePortable(PortableWriter writer,..){     // 1)写出我的已知属性

// 2) call ...
writePortableSubclass(writer);

// 3) write my remaining added attributes

// as you add more attributes to subclasses, you'll have to
// follow this pattern to keep attributes in order.  There is no magic api to do this for you.

}