2017-01-25 2 views
0

ポータブルシリアル化メカニズムに関する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でないフィールドなどのインバリアントを強制して処理する方法と、スーパークラスのフィールドを保護しないでサブクラスを非直列化する方法はありますか?

答えて

1

デシリアライズ中にオブジェクトが再構築されているため、不変量は維持できません。いくつかのフィールドは設定されていません。これに抵抗するポイントはありません。

あなたは引数なしのコンストラクタを強制されません。工場がインスタンスを作成できる限り、HZはそれをどのように作成するか気にしません。

+0

右のファクトリを同じパッケージに入れて、引数なしのコンストラクタパッケージをプライベートにして、引数コンストラクタだけが公に利用可能なコンストラクタの不変条件を調べるようにすることができます。 – noctarius

関連する問題