5

格納されたオブジェクトをインスタンス化するために db4o が使用するメカニズムは何ですか?

私のクラスはシリアライズ可能ではなく、ゼロ引数コンストラクターを提供せず、引数がnullの場合、唯一のコンストラクターがNullPointerExceptionをスローします。

それにもかかわらず、db4o はそのクラスの格納されたオブジェクトをインスタンス化できます (ただし、値は正しくありません)。

メカニズムを理解できれば、バグを突き止めることができるかもしれません。

リンクをいただければ幸いです:]

4

2 に答える 2

2

Sun (または他の jvm) の特別な API を使用して、アクセスをチェックしたりコンストラクターを実行したりせずにオブジェクトをインスタンス化します。

あなたが抱えているバグは、フィールドにデフォルト値を設定する暗黙的なコンストラクターを含め、コンストラクターが実行されていないことが原因である可能性が最も高いです。

于 2009-05-26T10:49:35.497 に答える
1

Db4o はオープン ソースなので、ソースを確認してみてください。基本的な考え方は、オブジェクトのシリアル化と逆シリアル化を可能にする型ハンドラーの使用です。カスタム タイプ ハンドラーを必要とする上級ユーザー向けの簡単なサンプルプロバイダーがあります。オブジェクトの構築では、コンストラクターを使用するか、適切なコンストラクターが存在しない場合はコンストラクターをバイパスできます。上記のコンストラクターのバグは、とにかくコンストラクターを呼び出すように db4o に指示する構成設定を使用することで防ぐことができます。

この質問を db4oフォーラムに投稿して、開発者からより詳細な説明を得ることができます。

ゴラン

于 2009-05-26T10:52:43.103 に答える