我可以将无arg构造函数与Hazelcast Portable一起使用吗?



关于其可移植序列化机制的Hazelcast文档说,您不会被迫使用no-arg构造函数。

https://hazelcast.org/mastering-hazelcast/#serialization-start

但是他们的示例代码显示了直接设置的字段。

@Override
public void readPortable(PortableReader reader) throws IOException {
    System.out.println("Deserialize");
    this.name = reader.readUTF("name");
}

用于创建被反序列化类实例的工厂使用的是 no-arg 构造函数。

@Override
public Portable create(int classId) {
    switch (classId) {
        case PERSON_CLASS_ID:
           return new Person();
    }
    return null;
 }

我假设您没有被迫使用 no-arg 构造函数但您在反序列化时不能使用它来设置字段值是否正确?您将如何处理强制实施不变量(如永不为空字段),以及如何在不保护超类中的字段的情况下反序列化子类?

在反序列化时,您无法保持不变量,因为对象正在重建;因此某些字段只是未设置。抗拒这一点是没有意义的。

而且您不会被迫拥有一个无参数构造函数。只要工厂可以创建实例,HZ 就不在乎你如何创建它。

最新更新