我可以在Hazelcast Portable中使用no-arg构造函数吗?

时间:2017-01-25 13:17:51

标签: hazelcast

关于其可移植序列化机制的Hazelcast文档说,您不必使用无参数构造函数。

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构造函数但是在反序列化时你不能用它来设置字段值?您将如何处理强制不变量(例如never-null字段)以及如何在不使超类中的字段受到保护的情况下反序列化子类?

1 个答案:

答案 0 :(得分:1)

在反序列化时,您无法维护不变量,因为正在重建对象;所以有些字段没有设置。没有必要抵制这一点。

你并没有被迫拥有一个无参数的构造函数。只要工厂可以创建实例,HZ就不关心如何创建它。