6.1.4 オブジェクト操作
ここでは,Javaプログラム呼び出し機能が提供するオブジェクト操作のサービスルーチンについて説明します。
- 〈この項の構成〉
(1) CBLJCLASSNAME
CBLJCLASSNAMEサービスルーチンは,Javaのインスタンスの属するJavaクラスの名前(パッケージ名とクラス名の区切りはピリオド)を返します。
- 形式
-
CALL 'CBLJCLASSNAME' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,クラス名を受け取る英数字項目を指定します。
-
引数4には,クラス名を受け取る英数字項目のサイズ(文字数)を持つ,4バイト2進形式の数字項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタに0(正常)または1(サイズが不足)を返します。
名前の取得に失敗した場合は実行時エラーとなります。
- 注意事項
-
RETURN-CODEが1の場合,引数3に指定した項目に,引数4に指定した長さまでのJavaクラスの名前を設定します。
(2) CBLJINSTANCEOF
CBLJINSTANCEOFサービスルーチンは,JavaのインスタンスがJavaクラス参照で指定されたクラスのインスタンスまたはそのサブクラスのインスタンスである場合,1を返します。そうでない場合,0を返します。
- 形式
-
CALL 'CBLJINSTANCEOF' USING 引数1 引数2 引数3.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,Javaクラス参照を持つポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタに1(真)または0(偽)を返します。
判定自体に失敗した場合は実行時エラーとなります。
(3) CBLJSAMEOBJECT
CBLJSAMEOBJECTサービスルーチンは,二つのJavaオブジェクト参照が同じJavaインスタンスを指す場合,1を返します。そうでない場合,0を返します。
- 形式
-
CALL 'CBLJSAMEOBJECT' USING 引数1 引数2 引数3.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタに1(真)または0(偽)を返します。
判定自体に失敗した場合は実行時エラーとなります。
(4) CBLJEQUAL
CBLJEQUALサービスルーチンは,二つのJavaオブジェクト参照の指すJavaインスタンスが同じ値を持つ場合,1を返します。そうでない場合,0を返します。
二つの文字列オブジェクトが同じ文字列を持つかをチェックする場合などで使用します。
- 形式
-
CALL 'CBLJEQUAL' USING 引数1 引数2 引数3.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタに1(真)または0(偽)を返します。
判定自体に失敗した場合は実行時エラーとなります。
- 注意事項
-
Javaインスタンスが同じ値を持つかどうかの判定は,Javaインスタンスのequalsメソッドの結果に従います。
(5) CBLJCOPY
CBLJCOPYサービスルーチンは,引数2のJavaオブジェクト参照の複製を作成して,引数3に格納します。
その際,引数4がNULLポインタでなければ,引数2のインスタンスが引数4の型(クラスまたはインタフェース)にキャストできるかどうかをチェックします。キャストできない場合,複製は作成しないで,引数3にNULLポインタを設定します。
引数4がNULLポインタなら,無条件に引数2のJavaオブジェクト参照の複製を引数3に格納します。
引数3にJavaオブジェクト参照が格納されている場合は,解放してから格納します。
- 形式
-
CALL 'CBLJCOPY' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,Javaオブジェクト参照を受け取るポインタ項目を指定します。
-
引数4には,Javaクラス参照を持つポインタ項目を指定します。引数3に格納可能なオブジェクトの型(クラスまたはインタフェース)をJavaクラス参照で指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタに0(コピー成功)または1(コピー失敗)を返します。
キャストできるかどうかのチェック自体ができなかった場合は,実行時エラーとなります。
- 注意事項
-
Javaオブジェクト参照は,COMPUTE文やSET文では転記しないで,必ずCBLJCOPYサービスルーチンで複製を作成して転記してください。
Javaオブジェクト参照の扱いは,必ずJavaオブジェクト参照の使用ガイドラインに従ってください。Javaオブジェクト参照の使用ガイドラインについては,「3.2.5 Javaオブジェクト参照の使用ガイドライン」を参照してください。
(6) CBLJSETNULL
CBLJSETNULLサービスルーチンは,Javaオブジェクト参照用のポインタ項目にNULLを設定します。Javaオブジェクト参照が格納されている場合は,解放してからNULLを設定します。CBLJSETNULLサービスルーチンは,ポインタ項目にNULLや不正なJavaオブジェクト参照が入っていてもエラーとならないことを除けば,動作はCBLJRELEASEサービスルーチンと同じです。
- 形式
-
CALL 'CBLJSETNULL' USING 引数1 引数2.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,NULLを設定するJavaオブジェクト参照用のポインタ項目を指定します。ポインタ項目にNULLが入っていてもかまいません。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
- 注意事項
-
手続き部でJavaオブジェクト参照用のポインタ項目にNULLを設定する場合は,COMPUTE文,SET文またはINITIALIZE文を使用しないで,必ずCBLJSETNULLサービスルーチンを使用してください。
Javaオブジェクト参照の扱いは,必ずJavaオブジェクト参照の使用ガイドラインに従ってください。Javaオブジェクト参照の使用ガイドラインについては,「3.2.5 Javaオブジェクト参照の使用ガイドライン」を参照してください。