存在しないオブジェクトの使用

固有のメソッドに静的な Object 変数 (定義に STATIC キーワード) がある場合、 または固有のメソッドが静的なグローバル Object 変数 (メイン・ソース・セクションで宣言した変数) を使用している場合、 その Object 変数は、その固有のメソッドが次に呼び出されるまで値を保持し続けます。 しかし、デフォルトでは、Java™ は固有メソッドの呼び出し時に作成されたオブジェクトをすべて解放します (Java がオブジェクトを解放しないようにする方法については、 Java を使用するためのその他の RPG コーディングを参照してください)。

RPG の "Object" は実際には数値オブジェクト参照です。 Java オブジェクトが解放されても、この数値オブジェクト参照を再利用することができます。RPG 固有のメソッドが、明示的に解放の禁止が指定されていない静的な Object 変数を参照すると、 次のいずれかが発生する可能性があります。
  1. 数値オブジェクト参照が再使用されていない場合、 オブジェクト参照は無効となる可能性があります。
  2. オブジェクト参照は再使用されている可能性がありますが、 参照しているのは別のオブジェクトであるため、 RPG 固有のメソッドでそのオブジェクトを使用しようとしても、 エラーが発生する可能性があります。
オブジェクトの不正な再使用問題を防ぐには、次のようにします。
  • 静的記憶域で Object 変数を宣言しない。 代わりに、STATIC キーワードを使用せずに、 サブプロシージャーのローカル記憶域ですべての Object 変数を宣言します。
  • 固有のメソッドから戻る前に、 すべての静的オブジェクト参照を明示的に *NULL に設定する。
  • 固有のメソッドを入力するときに、 すべての静的オブジェクト参照を明示的に初期値に設定する。