我可以在Hazelcast Portable中使用无参数构造函数吗?

我可以在Hazelcast Portable中使用无参数构造函数吗?,hazelcast,Hazelcast,Hazelcast关于其可移植序列化机制的文档说明,您不必被迫使用无参数构造函数 但是他们的示例代码显示了直接设置字段 @Override public void readPortable(PortableReader reader) throws IOException { System.out.println("Deserialize"); this.name = reader.readUTF("name"); } 用于创建被反序列化的类实例的工厂正在使用无参数构造函数 @

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

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

@Override
public void readPortable(PortableReader reader) throws IOException {
    System.out.println("Deserialize");
    this.name = reader.readUTF("name");
}
用于创建被反序列化的类实例的工厂正在使用无参数构造函数

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

我假设您没有被迫使用无参数构造函数,但在反序列化时不能使用它来设置字段值,这对吗?您将如何处理强制执行不变量(如永不为空的字段)以及如何反序列化子类而不保护超类中的字段?

反序列化时,由于正在重建对象,您无法维护不变量;所以有些字段没有设置。抵制这一点是没有意义的


并且您不必强制使用无参数构造函数。只要工厂可以创建实例,HZ就不在乎如何创建它。

好的,您可以将工厂放在同一个包中,并使无参数构造函数包成为私有的,并且只让参数构造函数检查公共可用构造函数中的不变量。