ポータブルシリアル化メカニズムに関するHazelcastのドキュメントによれば、引数なしのコンストラクタを使用する必要はありません。Hazelcast Portableで引数なしのコンストラクタを使用できますか?
https://hazelcast.org/mastering-hazelcast/#serialization-start
しかし、彼らの例のコードは、直接設定されているフィールドを示しています。
@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;
}
私は右のあなたは、引数なしのコンストラクタを使用するように強制されていないが、逆シリアル化するときにフィールド値を設定するためにそれを使用することはできませんと仮定しているだろうか?決してnullでないフィールドなどのインバリアントを強制して処理する方法と、スーパークラスのフィールドを保護しないでサブクラスを非直列化する方法はありますか?
右のファクトリを同じパッケージに入れて、引数なしのコンストラクタパッケージをプライベートにして、引数コンストラクタだけが公に利用可能なコンストラクタの不変条件を調べるようにすることができます。 – noctarius